将整个脚本放入带有{SERVERNAME}占位符的模板字符串中。然后使用以下命令编辑字符串:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
然后用
EXECUTE (@SQL_SCRIPT)
很难相信,在三年的时间里,没有人注意到我的代码不起作用!
您不能EXEC
多个批次。GO
是批处理分隔符,而不是T-SQL语句。必须构建三个单独的字符串,然后EXEC
替换后再构建每个字符串。
我想可以通过拆分将单个模板字符串分成多行来做一些“聪明”的事情GO
。我已经在ADO.NET代码中做到了这一点。
我从哪里得到“ SERVERNAME”一词?
这是我刚刚测试过的一些代码(有效):
DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'TestDB'
DECLARE @CREATE_TEMPLATE VARCHAR(MAX)
DECLARE @COMPAT_TEMPLATE VARCHAR(MAX)
DECLARE @RECOVERY_TEMPLATE VARCHAR(MAX)
SET @CREATE_TEMPLATE = 'CREATE DATABASE {DBNAME}'
SET @COMPAT_TEMPLATE='ALTER DATABASE {DBNAME} SET COMPATIBILITY_LEVEL = 90'
SET @RECOVERY_TEMPLATE='ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE'
DECLARE @SQL_SCRIPT VARCHAR(MAX)
SET @SQL_SCRIPT = REPLACE(@CREATE_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@COMPAT_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)
SET @SQL_SCRIPT = REPLACE(@RECOVERY_TEMPLATE, '{DBNAME}', @DBNAME)
EXECUTE (@SQL_SCRIPT)