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
Libérer: 2024-12-17 00:24:25
original
905 Les gens l'ont consulté

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
Copier après la connexion

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

SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo)
Copier après la connexion

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';
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal