xp_instance_RegRead和xp_RegRead之间的差异

时间:2010-12-14 14:23:50

标签: sql-server

XP_REGREAD和XP_INSTANCE_REGREAD之间的区别是什么。 如何使用它们,是否有关于这些的文档?

2 个答案:

答案 0 :(得分:25)

xp_regread读取您指定的文字注册表路径。 xp_instance_regread“转换”您指定的路径,使其与您当前使用的SQL Server实例匹配。

例如,我的计算机上安装了SQL Server的Developer和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的路径完全不同。

答案 1 :(得分:3)

Gabriel,服务帐户不一定是dbo。只要用户是master数据库中的用户,就可以授予master db中系统对象的执行权限。

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