Fügen Sie das gesamte Skript in eine Vorlagenzeichenfolge mit Platzhaltern {SERVERNAME} ein. Bearbeiten Sie dann die Zeichenfolge mit:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
und dann ausführen mit
EXECUTE (@SQL_SCRIPT)
Es ist kaum zu glauben, dass im Laufe von drei Jahren niemand bemerkt hat, dass mein Code nicht funktioniert !
Sie können nicht EXEC
mehrere Chargen. GO
ist ein Batch-Trennzeichen, keine T-SQL-Anweisung. Es ist notwendig, drei separate Zeichenfolgen zu erstellen und EXEC
nach der Ersetzung jeweils eine.
Ich nehme an, man könnte etwas "Kluges" tun, indem man die einzelne Vorlagenzeichenfolge durch Aufteilen in mehrere Zeilen aufteilt GO
. Ich habe das in 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)