sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan bruger man en variabel til databasenavnet i T-SQL?

Sæt hele scriptet i en skabelonstreng med {SERVERNAME} pladsholdere. Rediger derefter strengen med:

SET @SQL_SCRIPT = REPLACE(@TEMPLATE, '{SERVERNAME}', @DBNAME)

og kør det derefter med

EXECUTE (@SQL_SCRIPT)

Det er svært at tro, at ingen i løbet af tre år har bemærket, at min kode ikke virker !

Du kan ikke EXEC flere partier. GO er en batch-separator, ikke en T-SQL-sætning. Det er nødvendigt at bygge tre separate strenge og derefter til EXEC hver enkelt efter udskiftning.

Jeg formoder, at man kunne gøre noget "klogt" ved at bryde den enkelte skabelonstreng i flere rækker ved at opdele på GO; Jeg har gjort det i ADO.NET-kode.

Og hvor har jeg fået ordet "SERVERNAVN" fra?

Her er noget kode, som jeg lige har testet (og som virker):

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)


  1. Opretholdelse af et grupperet kørende MAX (eller MIN)

  2. Til forsvar for sar (og hvordan man konfigurerer det)

  3. Kan en INNER JOIN tilbyde bedre ydeevne end EKSISTERER

  4. Sådan opretter du en grupperet rapport ved hjælp af rapportguiden i Access 2016