Maison >base de données >tutoriel mysql >Comment transmettre correctement les résultats d'expression en tant que paramètres de procédure stockée ?

Comment transmettre correctement les résultats d'expression en tant que paramètres de procédure stockée ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-11 17:12:43515parcourir

How to Correctly Pass Expression Results as Stored Procedure Parameters?

Pièges des paramètres de procédure stockée SQL Server : gestion des résultats d'expression

Transmettre la sortie d'expressions ou d'appels de fonction directement en tant que paramètres dans les procédures stockées SQL Server entraîne souvent des erreurs. Illustrons cela avec un problème courant rencontré dans SQL Server 2005 :

L'extrait de code suivant génère une erreur de syntaxe :

<code class="language-sql">DECLARE @pID int;
SET @pID = 1;
EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>

Cela entraîne l'erreur :

<code>Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '+'.</code>

La cause profonde ? SQL Server n'autorise pas l'utilisation directe d'expressions ou de résultats de fonction dans la liste de paramètres de la procédure stockée. La solution implique une variable intermédiaire.

Voici l'approche corrigée :

<code class="language-sql">DECLARE @pID INT;
DECLARE @logMessage VARCHAR(50);

SET @pID = 1;
SET @logMessage = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11));
EXEC WriteLog 'Component', 'Source', @logMessage;</code>

Ce code révisé attribue le résultat de l'expression à @logMessage, qui est alors correctement reconnu comme troisième paramètre. La procédure stockée s'exécute sans erreur.

Il est crucial de noter : cette restriction s'applique uniquement aux valeurs des paramètres ; les expressions dans le corps de la procédure stockée ne sont pas affectées.

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