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

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。 是的,我也有这种感觉……哦,好吧

以上是关于将函数返回值传递给存储过程参数的主要内容,如果未能解决你的问题,请参考以下文章

c复习过程随笔七

使用 EventSubscriber 将函数的返回值作为属性传递给 json

函数的格式

go语言:函数参数传递详解

如何处理将 DBNull 传递给函数?

存储过程和函数的区别