Предыдущее возвращает местоположение для клиента SQL, что на самом деле не то, что вам нужно.Следующее работает в SQL 2005, 2008 и 2008 R2.
declare @SQLDataRoot varchar(256)
exec master..xp_instance_regread
@rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\MSSQLServer\Setup',
@value_name='SQLDataRoot',
@value=@SQLDataRoot output
Недокументированный xp_instance_regread правильно ищет в реестре переменную SQLDataRoot для запрашиваемого вами экземпляра SQL - путь, который вы видите вПриведенный выше запрос не совсем верный путь в реестре.XP заменяет MSSQLServer версией и именем экземпляра.Например, истинный ключ в моем экземпляре -
SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.Inst2\Setup
. В этом случае я использую SQL 2008 R2 (превращается в MSSQL10_50) с именем экземпляра Inst2.