将函数返回值传递给存储过程参数

Passing function return value to stored procedure parameter

提问人:freefaller 提问时间:6/16/2021 更新时间:6/16/2021 访问量:504

问:

有没有办法将函数的返回值直接传递到存储过程参数中,而无需先存储在变量中?

例如,给定以下存储过程(该存储过程将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

我意识到从表面上看这不是一个大问题,但如果我能把它作为一条线,那真的会帮助我的情况。我的假设是这根本不可能

sql-server 存储过程 参数传递 sql-server-2014

评论


答:

2赞 Thom A 6/16/2021 #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()

因此,必须首先将值存储在变量中,然后将该变量传递给过程。

评论

0赞 freefaller 6/16/2021
感谢您的确认 - 很不幸,但意料之中。我现在提出了一个后续问题
0赞 Thom A 6/16/2021
是的,我看到了,很确定答案也是“不”,@freefaller。
0赞 freefaller 6/16/2021
是的,我也有这种感觉......那好吧