Pour les requêtes statiques, comme celle de votre question, les noms de table et les noms de colonne doivent être statiques.
Pour les requêtes dynamiques, vous devez générer dynamiquement le SQL complet 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
et 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
Étant donné que les requêtes dynamiques comportent de nombreux détails qui doivent être pris en compte et qu'elles sont difficiles à maintenir, je vous recommande de lire :La malédiction et les bénédictions du SQL dynamique