为什么我不能使用函数直接分配存储过程参数?
e.g。
exec myStoredProc @firstParam = aFunctionThatReturnsAnAppropriateValue()
但我发现我必须对变量进行十分转换以保存值
declare @temp type = aFunctionThatReturnsAnAppropriateValue()
exec myStoredProc @firstParam = @temp
这似乎是多余的
答案 0 :(得分:1)
Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH RECOMPILE ]
}
[;]
您可以看到它明确说明@variable
或value
。我想这是一种语言限制,因为你既不能将函数调用作为变量,也不能作为值;它是可执行代码(表达式),变量声明期间的简写赋值只是一种误导性的奖励。
编辑:比较DECLARE
和EXECUTE
的描述差异:
DECLARE
=值
在线赋值给变量。值可以是常量或表达式,但必须与变量匹配 声明类型或可隐式转换为该类型。
在查看EXECUTE
的页面时,我没有看到提及表达式。在我看来,它会是方便的,因为我认为你试图指出。