Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

xp_regread читает литеральный путь к реестру, который вы указываете. xp_instance_regread "преобразует" указанный вами путь, чтобы он соответствовал экземпляру SQL Server, который вы используете в данный момент.

В качестве примера у меня на компьютере установлены версии для разработчиков и Express SQL Server. Я подключаюсь к экземпляру 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.

Ответ 2

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

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