1

我需要将启动跟踪标志从批处理文件添加到 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 这对我来说似乎是正确的。

4

1 回答 1

1

SQL Server 的默认实例的注册表项是:

SET @Key = 'SOFTWARE\Microsoft\Microsoft SQL Server
    \MSSQL11.MSSQLSERVER\MSSQLServer\Parameters';

(为了便于阅读,我将上面的密钥包装起来 - 您需要将这些全部放在一行中。)

除非您有命名实例,否则您可以使用此 @Key 而不是您的。如果您在服务器上命名了实例,则需要检查SOFTWARE\Microsoft\Microsoft SQL Server\InstalledInstances以获取服务器上实例的名称。

我想有更优雅的方式使用 PowerShell 来做到这一点。

于 2013-04-03T13:45:10.903 回答