Intégration de variables de table dans Dynamic SQL dans SQL Server 2008 et versions ultérieures
La création de requêtes SQL dynamiques dans SQL Server 2008 et les versions ultérieures nécessite souvent l'incorporation de variables de table. Cependant, leur inclusion directe entraîne fréquemment des erreurs de « variable de table non déclarée ».
La solution réside dans l'exploitation des paramètres table. Ces paramètres permettent de transmettre des variables de table en SQL dynamique sans modifier les tables de base.
Examinons un problème courant :
<code class="language-sql">set @col_name = 'Assoc_Item_' + Convert(nvarchar(2), @curr_row1); set @sqlstat = 'update @RelPro set ' + @col_name + ' = (Select relsku From @TSku Where tid = ' + Convert(nvarchar(2), @curr_row1) + ') Where RowID = ' + Convert(nvarchar(2), @curr_row); Exec(@sqlstat);</code>
Ce code échouera car @RelPro
et @TSku
ne sont pas reconnus dans le contexte SQL dynamique. Pour transmettre correctement @TSku
, utilisez un paramètre table :
<code class="language-sql">EXEC sp_executesql N'SELECT * FROM @T', N'@T MyTable READONLY', @T=@TSku;</code>
Ici, @TSku
est transmis en tant que paramètre en lecture seule (READONLY
) à sp_executesql
. Le paramètre @T
agit comme un espace réservé dans l'instruction SQL dynamique. Cette méthode intègre proprement les variables de table dans vos requêtes dynamiques, évitant ainsi les erreurs de déclaration et garantissant une exécution fluide. Cette approche fournit un moyen robuste et efficace de gérer les requêtes SQL dynamiques impliquant des variables de table.
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!