Platzieren Sie das gesamte Skript in einer Vorlagenzeichenfolge mit Platzhaltern für {SERVERNAME}. Bearbeiten Sie dann die Zeichenfolge mit:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
und dann mit
ausführenEXECUTE (@SQL_SCRIPT)
Kaum zu glauben, dass im Laufe von drei Jahren niemandem aufgefallen ist, dass mein Code nicht funktioniert !
Sie können nicht EXEC
mehrere Chargen. GO
ist ein Stapeltrennzeichen, keine T-SQL-Anweisung. Es ist notwendig, drei separate Zeichenfolgen zu erstellen und dann EXEC
auszuführen jeweils nach Substitution.
Ich nehme an, man könnte etwas "Cleveres" machen, indem man die einzelne Vorlagenzeichenfolge in mehrere Zeilen aufteilt, indem man sie auf GO
aufteilt; Ich habe das im ADO.NET-Code gemacht.
Und woher habe ich das Wort "SERVERNAME"?
Hier ist ein Code, den ich gerade getestet habe (und der funktioniert):
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)