首页 > 解决方案 > 将函数返回值传递给存储过程参数

问题描述

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

例如,给定以下存储过程(将 on 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-servertsqlstored-proceduresparameter-passingsql-server-2014

解决方案


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

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


推荐阅读