0

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

例如

exec myStoredProc @firstParam = aFunctionThatReturnsAnAppropriateValue()

但我发现我必须标记一个变量才能保存该值

declare @temp type = aFunctionThatReturnsAnAppropriateValue()

exec myStoredProc @firstParam = @temp

这似乎是多余的

4

1 回答 1

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 ]
    }
[;]

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

编辑:比较 和 的描述DECLARE差异EXECUTE

为了DECLARE

=value
为内联变量赋值。该值可以是常量或表达式,但它必须与变量声明类型匹配,或者可以隐式转换为该类型。

浏览页面时EXECUTE,我没有看到提及表达式。在我看来,这会很方便,正如我认为您试图指出的那样。

于 2012-07-06T09:43:33.563 回答