sql >> Database >  >> RDS >> Sqlserver

Hoe gebruik je een variabele voor de databasenaam in T-SQL?

Zet het hele script in een sjabloontekenreeks, met tijdelijke aanduidingen voor {SERVERNAME}. Bewerk vervolgens de string met:

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

en voer het dan uit met

EXECUTE (@SQL_SCRIPT)

Het is moeilijk te geloven dat in de loop van drie jaar niemand heeft opgemerkt dat mijn code niet werkt !

U kunt niet EXEC meerdere batches. GO is een batchscheidingsteken, geen T-SQL-instructie. Het is nodig om drie afzonderlijke strings te bouwen, en dan naar EXEC elk na vervanging.

Ik veronderstel dat je iets "slims" zou kunnen doen door de enkele sjabloonreeks in meerdere rijen te splitsen door te splitsen op GO; Ik heb dat gedaan in ADO.NET-code.

En waar heb ik het woord "SERVERNAME" vandaan?

Hier is wat code die ik zojuist heb getest (en die werkt):

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. Logische databaseback-ups met MySQL Shell

  2. Android met Room - Hoe een externe sleutel nullable in te stellen

  3. Hoe automatisch identiteit voor een Oracle-database genereren via Entity Framework?

  4. SQLite-queryresultaten opslaan in een tekstbestand