Per le query statiche, come quella nella tua domanda, i nomi delle tabelle e delle colonne devono essere statici.
Per le query dinamiche, dovresti generare l'SQL completo in modo dinamico e utilizzare sp_executesql per eseguirlo.
Ecco un esempio di uno script utilizzato per confrontare i dati tra le stesse tabelle di database diversi:
Interrogazione statica:
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Dal momento che voglio cambiare facilmente il nome di table
e schema
, ho creato questa query dinamica:
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
Poiché le query dinamiche hanno molti dettagli che devono essere considerati e sono difficili da mantenere, ti consiglio di leggere:La maledizione e le benedizioni dell'SQL dinamico