sql >> Databáze >  >> RDS >> Sqlserver

Jak použít proměnnou pro název databáze v T-SQL?

Vložte celý skript do řetězce šablony se zástupnými symboly {SERVERNAME}. Poté řetězec upravte pomocí:

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

a poté jej spusťte pomocí

EXECUTE (@SQL_SCRIPT)

Je těžké uvěřit, že si během tří let nikdo nevšiml, že můj kód nefunguje !

Nemůžete EXEC více dávek. GO je oddělovač dávek, nikoli příkaz T-SQL. Je nutné sestavit tři samostatné řetězce a poté provést EXEC každý po vystřídání.

Předpokládám, že by se dalo udělat něco "chytřejšího" rozdělením jednoho řetězce šablony do více řádků rozdělením na GO; Udělal jsem to v kódu ADO.NET.

A odkud jsem vzal slovo "SERVERNAME"?

Zde je nějaký kód, který jsem právě testoval (a který funguje):

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. Zastaralé funkce, které je třeba vyjmout ze sady nástrojů – část 1

  2. Deklarování a nastavení proměnných v příkazu Select

  3. Proč není v PostgreSQL dostupné celé číslo bez znaménka?

  4. Jak získat krátký název měsíce z data v MySQL