Различия между xp_instance_RegRead и xp_RegRead

В чем разница между XP_REGREAD и XP_INSTANCE_REGREAD. Как их использовать, есть ли на них документы?

2 ответа

Решение

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.

Габриэль, Сервисный аккаунт не должен быть dbo. Пока пользователь является пользователем в базе данных master, вы можете предоставлять разрешения на выполнение для системных объектов в master db.

GRANT EXEC ON OBJECT::master.dbo.xp_instance_regread TO ServiceAccountUserName

Другие вопросы по тегам