Voor statische zoekopdrachten, zoals die in uw vraag, moeten tabelnamen en kolomnamen statisch zijn.
Voor dynamische query's moet u de volledige SQL dynamisch genereren en sp_executesql gebruiken om deze uit te voeren.
Hier is een voorbeeld van een script dat wordt gebruikt om gegevens tussen dezelfde tabellen van verschillende databases te vergelijken:
Statische zoekopdracht:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Omdat ik de naam van table
gemakkelijk wil veranderen en schema
, Ik heb deze dynamische zoekopdracht gemaakt:
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
Aangezien dynamische query's veel details hebben waarmee rekening moet worden gehouden en ze moeilijk te onderhouden zijn, raad ik u aan te lezen:De vloek en zegeningen van dynamische SQL