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

Tên bảng dưới dạng một biến

Đối với các truy vấn tĩnh, như truy vấn trong câu hỏi của bạn, tên bảng và tên cột cần phải tĩnh.

Đối với các truy vấn động, bạn nên tạo động SQL đầy đủ và sử dụng sp_executesql để thực thi nó.

Dưới đây là một ví dụ về tập lệnh được sử dụng để so sánh dữ liệu giữa các bảng giống nhau của các cơ sở dữ liệu khác nhau:

Truy vấn tĩnh:

SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]

Vì tôi muốn dễ dàng thay đổi tên của tableschema , Tôi đã tạo truy vấn động này:

declare @schema varchar(50)
declare @table varchar(50)
declare @query nvarchar(500)

set @schema = 'dbo'
set @table = 'ACTY'

set @query = 'SELECT * FROM [DB_ONE].[' + @schema + '].[' + @table + '] EXCEPT SELECT * FROM [DB_TWO].[' + @schema + '].[' + @table + ']'

EXEC sp_executesql @query

Vì các truy vấn động có nhiều chi tiết cần được xem xét và chúng khó duy trì, tôi khuyên bạn nên đọc:Lời nguyền và phước lành của SQL động



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương pháp tốt nhất để loại bỏ phần thời gian của datetime trong SQL Server

  2. CLR nghiêm ngặt bảo mật trên SQL Server 2017

  3. Chọn hàng đầu tiên cho mỗi nhóm

  4. Cách chuyển các tham số giá trị bảng sang thủ tục được lưu trữ từ mã .net

  5. Làm cách nào để bạn mở tệp SDF (SQL Server Compact Edition)?