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 le SQL complet de manière dynamique et utiliser sp_executesql pour l'exécuter.
Voici un exemple de script utilisé pour comparer des 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 facilement changer 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 ont de nombreux détails qui doivent être pris en compte et qu'ils sont difficiles à maintenir, je vous recommande de lire: La malédiction et les bénédictions du SQL dynamique
Un peu en retard pour une réponse mais devrait aider quelqu'un d'autre:
la source
COUNT(*)
?Vous ne pouvez pas utiliser un nom de table pour une variable, vous devez le faire à la place:
la source
Vous devrez générer le SQL dynamiquement:
la source
Utilisez
sp_executesql
pour exécuter n'importe quel SQL, par exemplela source
En outre, vous pouvez utiliser ceci ...
la source
la source
vous devez utiliser le SQL dynamique SQL Server
Utilisez EXEC pour exécuter n'importe quel SQL
Utilisez EXEC sp_executesql pour exécuter n'importe quel SQL
Utilisez EXECUTE sp_executesql pour exécuter n'importe quel SQL
la source
la source