XP_REGREAD和XP_INSTANCE_REGREAD之间的区别是什么。 如何使用它们,是否有关于这些的文档?
答案 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