在创建存储过程时,您可能会遇到将表达式的结果用作参数的困难。下面是一个示例:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
但是,此代码会引发错误(SQL Server 2005):
<code>Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '+'.</code>
语法错误解释
SQL Server 不允许在参数列表中进行此类操作。它期望参数是字面值、声明的变量或不带运算符的表达式。
解决方案:使用中间变量
为了解决这个问题,您必须使用一个中间变量。下面的更正后的代码演示了这种方法:
<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>
EXEC 语句的语法
作为参考,EXEC 语句的语法如下:
<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>
当前限制
在 SQL Server 中,参数列表中参数的可接受值仅限于字面值和以 @@ 为前缀的系统函数。不支持 SCOPE_IDENTITY() 等函数。
以上是如何将表达式结果作为参数传递给 SQL Server 存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!