Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie verwende ich eine Variable für den Datenbanknamen in T-SQL?

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ühren
EXECUTE (@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)