Introduction :
Essayer d'utiliser une variable comme nom de table dans une requête statique entraîne l'erreur "La variable de table doit être déclarée". Cet article explore la manière correcte de remplir dynamiquement les noms de tables.
Solution :
Pour les requêtes statiques, les noms de tables et de colonnes doivent être statiques. Cependant, les requêtes dynamiques permettent la génération dynamique d'instructions SQL complètes, qui peuvent être exécutées à l'aide de sp_executesql
.
Considérez le scénario suivant :
<code class="language-sql">declare @tablename varchar(50) set @tablename = 'test' select * from @tablename</code>
Cette requête statique échouera car le nom de la table est attribué dynamiquement.
Exemple de requête dynamique :
Le script suivant montre comment utiliser des requêtes dynamiques pour comparer les données de deux bases de données :
<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>
Dans cet exemple, les noms de table et le schéma sont dynamiques, permettant une comparaison facile des données dans différentes bases de données.
Remarque :
Les requêtes dynamiques nécessitent un examen et une maintenance minutieux. Il est recommandé de consulter des ressources telles que « La malédiction et la bénédiction de Dynamic SQL » pour connaître les meilleures pratiques.
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!