xp_regread читает буквенный путь реестра, который вы укажете. xp_instance_regread «преобразует» указанный вами путь, чтобы он соответствовал экземпляру SQL Server, который вы используете в данный момент.
Например, на моем компьютере установлены выпуски SQL Server для разработчиков и Express. Я подключаюсь к экземпляру Express и запускаю эти две команды:
declare @dir nvarchar(4000)
exec master.dbo.xp_regread
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\Setup',
N'SQLPath',
@dir output
select @dir
exec master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\Setup',
N'SQLPath',
@dir output
select @dir
Первое возвращает C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL
, которое является значением, найденным в указанном месте, но это не правильный путь установки для моего экземпляра Express.
Вторая возвращает c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL
, который является правильным путем для моего экземпляра Express. Это значение было действительно прочитано из HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQL.1\Setup
, что сильно отличается от пути, который я указал в xp_instance_regread.