Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để sử dụng một biến cho tên cơ sở dữ liệu trong T-SQL?

Đặt toàn bộ tập lệnh vào một chuỗi mẫu, với trình giữ chỗ {SERVERNAME}. Sau đó, chỉnh sửa chuỗi bằng cách sử dụng:

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

và sau đó chạy nó với

EXECUTE (@SQL_SCRIPT)

Thật khó tin rằng, trong suốt ba năm, không ai nhận thấy rằng mã của tôi không hoạt động !

Bạn không thể EXEC nhiều đợt. GO là một dấu phân tách hàng loạt, không phải là một câu lệnh T-SQL. Cần tạo ba chuỗi riêng biệt và sau đó đến EXEC mỗi người sau khi thay thế.

Tôi cho rằng người ta có thể làm điều gì đó "thông minh" bằng cách chia chuỗi mẫu đơn thành nhiều hàng bằng cách tách trên GO; Tôi đã làm điều đó trong mã ADO.NET.

Và tôi đã lấy từ "SERVERNAME" từ đâu?

Đây là một số mã mà tôi vừa thử nghiệm (và mã nào hoạt động):

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. Câu lệnh SQL CASE

  2. Tên cột hoặc số lượng giá trị được cung cấp không khớp với định nghĩa bảng

  3. varchar (500) có lợi thế hơn so với varchar (8000)?

  4. Bảng tạm thời của Sql Server biến mất

  5. Chỉ mục dựa trên hàm trong SQL Server