För statiska frågor, som den i din fråga, måste tabellnamn och kolumnnamn vara statiska.
För dynamiska frågor bör du generera hela SQL dynamiskt och använda sp_executesql för att köra den.
Här är ett exempel på ett skript som används för att jämföra data mellan samma tabeller i olika databaser:
Statisk fråga:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Eftersom jag enkelt vill ändra namnet på table
och schema
, Jag har skapat den här dynamiska frågan:
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
Eftersom dynamiska frågor har många detaljer som måste beaktas och de är svåra att underhålla rekommenderar jag att du läser:The curse and blessings of dynamic SQL