Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Doit déclarer la variable scalaire '@RowFrom' » lors de l'utilisation de paramètres d'entrée globaux dans des procédures stockées ?

Comment corriger l'erreur « Doit déclarer la variable scalaire '@RowFrom' » lors de l'utilisation de paramètres d'entrée globaux dans des procédures stockées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 00:24:25959parcourir

How to Fix

Résolution de l'erreur de compilation avec les paramètres d'entrée globaux "@RowFrom" et "@RowTo"

Dans une procédure stockée, déclarer les paramètres d'entrée globaux est nécessaires à leur utilisation dans le cadre de la procédure. Cependant, lors de l'exécution d'une requête SQL compilée dans la procédure stockée à l'aide de "Exec (@sqlstatement)", l'erreur "Doit déclarer la variable scalaire '@RowFrom'" peut survenir si les paramètres d'entrée "@RowFrom" ou "@RowTo" sont pas correctement déclaré ou utilisé.

Le message d'erreur fourni indique que la variable "@RowFrom" n'a pas été déclarée. Pour résoudre ce problème, déclarez explicitement "@RowFrom" et "@RowTo" comme variables scalaires dans la procédure stockée avant de les référencer dans la requête SQL.

De plus, lorsque vous essayez d'attribuer la valeur de "@RowTo" à une nouvelle variable utilisant la concaténation, assurez-vous que le type de variable est converti de manière appropriée. Au lieu de la syntaxe incorrecte

SET @Rt = ' + @RowTo

utilisez la syntaxe correcte pour convertir "@RowTo" en chaîne :

SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo)

Les versions modernes de SQL Server prennent en charge la fonction CONCAT(), qui simplifie ces opérations :

SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';

Cependant, pour une meilleure sécurité contre l'injection SQL, il est recommandé d'utiliser des instructions SQL paramétrées au lieu de la concaténation. Cela implique de transmettre explicitement les paramètres d'entrée à la requête SQL, comme dans l'exemple suivant :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn