Lors de la création d'une procédure stockée, vous pouvez rencontrer des difficultés à utiliser le résultat d'une expression comme paramètre. Voici un exemple :
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
Cependant, ce code génère une erreur (SQL Server 2005) :
<code>Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '+'.</code>
Explication de l'erreur de grammaire
SQL Server n'autorise pas de telles opérations dans les listes de paramètres. Il s'attend à ce que les arguments soient des valeurs littérales, des variables déclarées ou des expressions sans opérateurs.
Solution : Utiliser des variables intermédiaires
Pour résoudre ce problème, vous devez utiliser une variable intermédiaire. Le code corrigé ci-dessous illustre cette approche :
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; DECLARE @logMessage VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @logMessage;</code>
Syntaxe de l'instruction Exec
Pour référence, la syntaxe de l'instruction EXEC est la suivante :
<code class="language-sql">[ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] } [;]</execute_option></code>
Limites actuelles
Dans SQL Server, les valeurs acceptables pour les paramètres dans les listes de paramètres sont limitées aux valeurs littérales et aux fonctions système préfixées par @@. Les fonctions telles que SCOPE_IDENTITY() ne sont pas prises en charge.
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!