Umieść cały skrypt w ciągu znaków szablonu z symbolami zastępczymi {SERVERNAME}. Następnie edytować ciąg przy użyciu:
SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)
a następnie uruchomić go z
EXECUTE (@SQL_SCRIPT)
Trudno uwierzyć, że w ciągu trzech lat, nikt nie zauważył, że mój kod nie praca!
Nie możesz EXEC
wielu partii. GO
to separator wsadowy, a nie instrukcja T-SQL. Konieczne jest zbudowanie trzech oddzielnych łańcuchów, a następnie do EXEC
po zmianie.
Przypuszczam, że można zrobić coś "sprytnego", dzieląc pojedynczy ciąg szablonów na wiele wierszy, dzieląc na GO
; Zrobiłem to w kodzie ADO.NET.
A skąd otrzymałem słowo "SERVERNAME"?
Oto niektóre kodu, które po prostu testowane (i które działa):
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)
Dynamic SQL ..... –