Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да използвам променлива за името на базата данни в T-SQL?

Поставете целия скрипт в низ от шаблон с заместващи {SERVERNAME}. След това редактирайте низа с помощта на:

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

и след това го стартирайте с

EXECUTE (@SQL_SCRIPT)

Трудно е да се повярва, че в продължение на три години никой не забеляза, че кодът ми не работи !

Не можете да EXEC множество партиди. GO е разделител на партиди, а не T-SQL оператор. Необходимо е да се изградят три отделни низа и след това да се EXEC всеки след замяна.

Предполагам, че човек може да направи нещо "умно", като разбие единичния шаблонен низ на множество реда чрез разделяне на GO; Направих това в ADO.NET код.

И откъде взех думата „SERVERNAME“?

Ето код, който току-що тествах (и който работи):

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. Проактивни проверки на състоянието на SQL Server, част 4:ERRORLOG

  2. Времето за изчакване на заявката на SQL Server зависи от клаузата Where

  3. Съпоставяне на композитни ключове, като се използва първо EF код

  4. SQL заявка - обединяване на резултатите в един низ

  5. Как да конвертирате Unix Timestamp в стойност на дата/час в SQL Server