将函数返回值传递给存储过程参数
Posted
技术标签:
【中文标题】将函数返回值传递给存储过程参数【英文标题】:Passing function return value to stored procedure parameter 【发布时间】:2021-09-01 05:31:42 【问题描述】:有没有办法将函数的返回值直接传递到存储过程的参数中,而无需先存储在变量中?
例如,给定以下存储过程(将在 databaseA
上)
CREATE PROCEDURE [dbo].[MySproc]
@NAME NVARCHAR(50)
AS
我希望能够拨打以下电话(来自databaseB
)...
EXEC [databaseA]..MySproc DB_NAME()
这会导致以下错误:
')' 附近的语法不正确。
以下工作,但需要两行...
DECLARE @NAME NVARCHAR(50) = DB_NAME()
EXEC [databaseA]..MySproc @NAME
我意识到表面上这不是一个大问题,但如果我能将它作为一条线来处理,那将真的有助于我的情况。我的假设是这根本不可能
【问题讨论】:
【参考方案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 <execute_option> [ ,...n ] ]
[;]
请注意,对于参数,传递的值必须是(文字)值、变量或DEFAULT
关键字。它不能是一个表达式,它可能包括类似@Variable + 'string'
这样的简单表达式和像GETDATE()
这样的标量函数。
因此,您必须先将值存储在变量中,然后将该变量传递给过程。
【讨论】:
感谢您的确认 - 很不幸,但在意料之中。我现在问了follow up question 是的,我看到了,很确定答案也是“否”,@freefaller。 是的,我也有这种感觉……哦,好吧以上是关于将函数返回值传递给存储过程参数的主要内容,如果未能解决你的问题,请参考以下文章