Dévoiler le mystère du « doit déclarer la variable scalaire »
Dans le domaine des procédures stockées SQL, tenter d'utiliser des paramètres d'entrée globaux tels que "@RowFrom" et "@RowTo" dans les instructions SQL générées dynamiquement peuvent souvent conduire à l'erreur déroutante : "Doit déclarer le variable scalaire."
Ce problème survient car les paramètres ne sont pas explicitement déclarés dans la chaîne SQL (@sqlstatement) utilisée pour compiler la requête. Pour remédier à cela, il faut soit :
Utiliser CONVERT() pour convertir des variables en chaînes :
Au lieu de concaténer directement une variable de type int, utiliser CONVERT () pour le transformer en chaîne. Par exemple :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Cela garantit que la valeur de "@RowTo" peut être attribuée à "@Rt" sous forme de chaîne.
Employer la fonction CONCAT() moderne :
Dans les versions SQL plus récentes, la fonction CONCAT() simplifie la concaténation des paramètres, éliminant ainsi le besoin de manipulation manuelle. conversion.
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
Adopter un paramétrage sécurisé :
Cependant, il est fortement recommandé d'opter pour un paramétrage approprié plutôt que pour une concaténation de chaînes. Cette approche minimise le risque d'injection SQL en séparant le code SQL des paramètres saisis par l'utilisateur.
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
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!