Vložte celý skript do řetězce šablony se zástupnými symboly {SERVERNAME}. Poté řetězec upravte pomocí:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
a poté jej spusťte pomocí
EXECUTE (@SQL_SCRIPT)
Je těžké uvěřit, že si během tří let nikdo nevšiml, že můj kód nefunguje !
Nemůžete EXEC
více dávek. GO
je oddělovač dávek, nikoli příkaz T-SQL. Je nutné sestavit tři samostatné řetězce a poté provést EXEC
každý po vystřídání.
Předpokládám, že by se dalo udělat něco "chytřejšího" rozdělením jednoho řetězce šablony do více řádků rozdělením na GO
; Udělal jsem to v kódu ADO.NET.
A odkud jsem vzal slovo "SERVERNAME"?
Zde je nějaký kód, který jsem právě testoval (a který funguje):
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)