Поставете целия скрипт в низ от шаблон с заместващи {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)