【问题标题】:Passing function return value to stored procedure parameter将函数返回值传递给存储过程参数
【发布时间】:2023-03-14 02:46:01
【问题描述】:

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

例如,给定以下存储过程(将在 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 tsql stored-procedures parameter-passing sql-server-2014


    【解决方案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。
    • 是的,我也有这种感觉……哦,好吧
    猜你喜欢
    • 2015-09-02
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多