我需要从批处理文件向SQL服务添加启动跟踪标志。我一直在努力弄清楚如何做到这一点,并最终提出了以下,稍微笨拙的方法,使用未记录的TSQL程序,然后用SQLCMD调用它。问题是它抛出一个错误:RegCreateKeyEx()返回错误5,“访问被拒绝。”但是,同一服务器上的另一个脚本允许我更改其他注册表值,例如TCP端口。知道我做错了什么,或者更优雅的做法吗?
DECLARE @VALUE nvarchar(200)
DECLARE @Key nvarchar(2000)
SET @VALUE = '-T1118 -3604 -E'
SET @Key = 'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.' + (select SUBSTRING(@@SERVERNAME,CHARINDEX('\',@@SERVERNAME)+1,LEN(@@SERVERNAME)-1)) + '\MSSQLServer\Parameters'
EXECUTE master..xp_regwrite
'HKEY_LOCAL_MACHINE',
@Key,
'SQLArg3',
'REG_SZ',
@VALUE
创建@Key变量的表达式强调:SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL11.MYINSTANCE \ MSSQLServer \ Parameters 这似乎对我来说是正确的。
答案 0 :(得分:1)
SQL Server默认实例的注册表项是:
SET @Key = 'SOFTWARE\Microsoft\Microsoft SQL Server
\MSSQL11.MSSQLSERVER\MSSQLServer\Parameters';
(为了便于阅读,我将上面的密钥包裹起来 - 你需要在一行上完成这一切。)
除非您已命名实例,否则可以使用此@Key而不是您的。如果您在服务器上命名了实例,则需要检查SOFTWARE\Microsoft\Microsoft SQL Server\InstalledInstances
以获取服务器上实例的名称。
我想有更优雅的方法可以使用PowerShell。