Pour les requêtes statiques, comme celle de votre question, les noms des tables et des colonnes doivent être statiques.
Pour les requêtes dynamiques, vous devez générer le SQL complet de manière dynamique, et utiliser sp_executesql pour l'exécuter.
Voici un exemple de script utilisé pour comparer les données entre les mêmes tables de différentes bases de données :
Requête statique :
SELECT * FROM [DB_ONE].[dbo].[ACTY]
EXCEPT
SELECT * FROM [DB_TWO].[dbo].[ACTY]
Puisque je veux changer facilement le nom de table
y schema
J'ai créé cette requête dynamique :
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
Comme les requêtes dynamiques comportent de nombreux détails à prendre en compte et qu'elles sont difficiles à maintenir, je vous recommande de lire : La malédiction et les bienfaits du SQL dynamique