Für statische Abfragen, wie die in Ihrer Frage, müssen Tabellennamen und Spaltennamen statisch sein.
Für dynamische Abfragen sollten Sie das vollständige SQL dynamisch generieren und sp_executesql verwenden, um es auszuführen.
Hier ist ein Beispiel für ein Skript, das verwendet wird, um Daten zwischen denselben Tabellen verschiedener Datenbanken zu vergleichen:
Statische Abfrage:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Da ich den Namen von table
einfach ändern möchte und schema
, habe ich diese dynamische Abfrage erstellt:
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
Da dynamische Abfragen viele Details haben, die berücksichtigt werden müssen, und sie schwer zu warten sind, empfehle ich Ihnen die Lektüre:Fluch und Segen von dynamischem SQL