SQL Server存储过程参数分配

时间:2012-07-06 08:55:47

标签: sql sql-server-2008 stored-procedures

为什么我不能使用函数直接分配存储过程参数?

e.g。

exec myStoredProc @firstParam = aFunctionThatReturnsAnAppropriateValue()

但我发现我必须对变量进行十分转换以保存值

declare @temp type = aFunctionThatReturnsAnAppropriateValue()

exec myStoredProc @firstParam = @temp

这似乎是多余的

1 个答案:

答案 0 :(得分:1)

引用EXECUTE (Transact-SQL)

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

您可以看到它明确说明@variablevalue。我想这是一种语言限制,因为你既不能将函数调用作为变量,也不能作为值;它是可执行代码(表达式),变量声明期间的简写赋值只是一种误导性的奖励。

编辑:比较DECLAREEXECUTE的描述差异:

DECLARE

  

=值
  在线赋值给变量。值可以是常量或表达式,但必须与变量匹配   声明类型或可隐式转换为该类型。

在查看EXECUTE的页面时,我没有看到提及表达式。在我看来,它会是方便的,因为我认为你试图指出。