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