Untuk kueri statis, seperti yang ada di pertanyaan Anda, nama tabel dan nama kolom harus statis.
Untuk kueri dinamis, Anda harus membuat SQL lengkap secara dinamis, dan menggunakan sp_executesql untuk menjalankannya.
Berikut adalah contoh skrip yang digunakan untuk membandingkan data antara tabel yang sama dari database yang berbeda:
permintaan statis:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
karena saya ingin dengan mudah mengubah nama table
dan schema
saya telah membuat permintaan dinamis ini:
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
Karena pertanyaan dinamis memiliki banyak detail yang perlu dipertimbangkan dan sulit untuk dipertahankan, saya sarankan Anda membaca: Kutukan dan berkah dari SQL dinamis
Agak terlambat untuk jawaban tetapi harus membantu orang lain:
sumber
COUNT(*)
?Anda tidak dapat menggunakan nama tabel untuk variabel, Anda harus melakukan ini sebagai gantinya:
sumber
Anda harus membuat sql secara dinamis:
sumber
Gunakan
sp_executesql
untuk mengeksekusi SQL apa pun, misalnyasumber
Anda juga dapat menggunakan ini ...
sumber
sumber
Anda perlu menggunakan SQL Server dinamis SQL
Gunakan EXEC untuk menjalankan SQL apa pun
Gunakan EXEC sp_executesql untuk menjalankan SQL apa pun
Gunakan EXECUTE sp_executesql untuk menjalankan SQL apa pun
sumber
sumber