Question :
Lorsque vous essayez d'exécuter une requête en utilisant un nom de table stocké dans une variable (comme "@tablename"), vous recevez une erreur indiquant que la variable de table "@tablename" doit être déclarée.
Solution :
Dans une requête statique comme celle présentée dans la question, les noms de table et de colonne doivent être statiques. Pour les requêtes dynamiques avec des noms de table renseignés dynamiquement, le SQL complet doit être généré et exécuté dynamiquement à l'aide de sp_executesql
.
Exemple :
Supposons que nous souhaitions comparer les données de la même table dans différentes bases de données. Une requête statique ressemble à ceci :
<code class="language-sql">SELECT * FROM [DB_ONE].[dbo].[ACTY] EXCEPT SELECT * FROM [DB_TWO].[dbo].[ACTY]</code>
Pour rendre cette requête dynamique, le schéma et le nom de la table peuvent être définis comme variables :
<code class="language-sql">declare @schema sysname; declare @table sysname; declare @query nvarchar(max); set @schema = 'dbo'; set @table = 'ACTY'; set @query = ' SELECT * FROM [DB_ONE].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table) + ' EXCEPT SELECT * FROM [DB_TWO].' + QUOTENAME(@schema) + '.' + QUOTENAME(@table); EXEC sp_executesql @query;</code>
En utilisant sp_executesql
, du SQL généré dynamiquement peut être exécuté.
Autres notes :
Les requêtes dynamiques nécessitent un examen et une maintenance minutieux. Il est recommandé de vous familiariser avec les détails du SQL dynamique avant d'implémenter de telles requêtes dans votre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!