Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wykorzystać zmienną do nazwy bazy danych w T-SQL?

Umieść cały skrypt w ciągu szablonu z symbolami zastępczymi {SERVERNAME}. Następnie edytuj ciąg za pomocą:

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

a następnie uruchom go za pomocą

EXECUTE (@SQL_SCRIPT)

Trudno uwierzyć, że w ciągu trzech lat nikt nie zauważył, że mój kod nie działa !

Nie możesz EXEC wiele partii. GO jest separatorem wsadowym, a nie instrukcją T-SQL. Konieczne jest zbudowanie trzech oddzielnych ciągów, a następnie wykonanie EXEC każdy po podstawieniu.

Przypuszczam, że można zrobić coś „sprytnego”, dzieląc pojedynczy ciąg szablonu na wiele wierszy, dzieląc na GO; Zrobiłem to w kodzie ADO.NET.

A skąd wzięłam słowo „NAZWA SERWERA”?

Oto kod, który właśnie przetestowałem (i który 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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UNIX_TIMESTAMP w SQL Server

  2. Kiedy wydajność Distinct i Group By jest inna?

  3. ACOS() Przykłady w SQL Server

  4. Równoległe przywracanie kopii zapasowej serwera SQL Server -2

  5. Przykłady konwersji „smalldatetime” na „datetime” w SQL Server (T-SQL)