Поместите весь скрипт в строку шаблона с помощью заполнителей {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)
Динамический SQL ..... –