U statických dotazů, jako je ten ve vaší otázce, musí být názvy tabulek a sloupců statické.
U dynamických dotazů byste měli dynamicky generovat celý SQL a k jeho provedení použít sp_executesql.
Zde je příklad skriptu používaného k porovnání dat mezi stejnými tabulkami různých databází:
Statický dotaz:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Protože chci snadno změnit název table
a schema
, vytvořil jsem tento dynamický dotaz:
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
Vzhledem k tomu, že dynamické dotazy obsahují mnoho detailů, které je třeba vzít v úvahu, a je obtížné je udržovat, doporučuji, abyste si přečetli:Prokletí a požehnání dynamického SQL