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

Passing function return value to stored procedure parameter

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

例如,给定以下存储过程(将在 databaseA 上)

CREATE PROCEDURE [dbo].[MySproc]
   @NAME NVARCHAR(50)
AS

我希望能够调用以下内容(来自 databaseB)...

EXEC [databaseA]..MySproc DB_NAME()

这会导致以下错误:

Incorrect syntax near ')'.

以下有效,但需要两行...

DECLARE @NAME NVARCHAR(50) = DB_NAME()
EXEC [databaseA]..MySproc @NAME

我意识到表面上这不是什么大问题,但如果我能把它作为一条线来处理,那对我的情况确实有帮助。我的假设是这根本不可能

没有。从 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().

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