Maison > base de données > tutoriel mysql > Pourquoi ma procédure stockée SQL génère-t-elle une erreur « Doit déclarer la variable scalaire » ?

Pourquoi ma procédure stockée SQL génère-t-elle une erreur « Doit déclarer la variable scalaire » ?

Patricia Arquette
Libérer: 2024-12-23 00:52:10
original
962 Les gens l'ont consulté

Why Does My SQL Stored Procedure Throw a

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

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

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;
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