Problème avec les paramètres d'entrée globaux et l'exécution SQL
Dans une procédure stockée qui compile une requête SQL avec T-SQL et l'exécute à l'aide d'EXEC (@sqlstatement), vous pouvez rencontrer une erreur indiquant "Doit déclarer la variable scalaire "@RowFrom"." lorsque vous tentez d'utiliser les paramètres d'entrée globaux @RowFrom et @RowTo dans la variable @sqlstatement.
Comprendre le problème
L'erreur se produit car les paramètres @RowFrom et @RowTo ne sont pas reconnus dans la chaîne @sqlstatement. En effet, les chaînes SQL ne peuvent pas accéder directement aux variables globales sans déclaration explicite.
Solution : convertir Int en chaîne ou utiliser un paramétrage approprié
Il existe deux approches pour résoudre ce problème. :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
Considération pour les versions modernes
Dans les versions modernes de SQL, vous pouvez utiliser la fonction CONCAT pour la concaténation de chaînes :
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
Cependant, il est recommandé d'utiliser un paramétrage approprié pour éviter les vulnérabilités d'injection SQL.
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!