0

我有一个问题,我有一个返回值的存储过程。此存储过程正在另一个 SP 中执行,我需要将值传输到此 SP。我怎样才能做到这一点。

任何帮助将不胜感激。

谢谢

例子:

CREATE PROC [dbo].[isp_CREATE_CONFIG]

@CFG_KEY VARCHAR(15)
, @CFG_SHORTVALUE INT
, @CFG_LONGVALUE VARCHAR(200)
, @CFG_DESC VARCHAR(250)
, @CFG_SHORT_DESC VARCHAR(100)
, @CFG_MISC1 VARCHAR(50)
, @CFG_MISC2 VARCHAR(50)
, @CFG_MISC3 VARCHAR(50)
, @CFG_MISC4 VARCHAR(50)
, @CFG_MISC5 VARCHAR(50)
, @CFG_USER VARCHAR(20)
, @CFG_MSG VARCHAR(250) OUTPUT

AS

DECLARE 
@c_ErrMsg VARCHAR(200)
, @c_ErrNum VARCHAR(5)
, @c_Continue INT
, @c_Date VARCHAR(20)


/* Assign value to local variables */
SET @c_Date = GETDATE()
SET @c_Continue = 0

/* Run Validations */
IF EXISTS (SELECT 1 FROM CONFIG(NOLOCK) WHERE cfg_key = @CFG_KEY)
    BEGIN
        SET @c_ErrNum = 60001
        SET @c_ErrMsg = 'Configuration Key (' + @CFG_KEY + ') already exist. Please check System Configuration. Error: ' + @c_ErrNum
        SET @CFG_MSG = @c_ErrMsg
        SET @c_Continue = 1
    END



/* Create Configuration */
SET @CFG_MSG = ''

IF @c_Continue = 0
    BEGIN
        IF NOT EXISTS(SELECT 1 FROM CONFIG(NOLOCK) WHERE cfg_key = @CFG_KEY)
            BEGIN
                INSERT INTO CONFIG
                    (
                        cfg_key         , cfg_short_value   , cfg_long_value    , cfg_desc          ,cfg_short_desc
                        , cfg_misc1     , cfg_misc2         , cfg_misc3         , cfg_misc4
                        , cfg_misc5     , cfg_add_who       , cfg_edit_date     , cfg_edit_who
                    )
                VALUES
                    (
                        @CFG_KEY        , @CFG_SHORTVALUE   , @CFG_LONGVALUE    , @CFG_DESC         , @CFG_SHORT_DESC
                        , @CFG_MISC1    , @CFG_MISC2        , @CFG_MISC3        , @CFG_MISC4
                        , @CFG_MISC5    , @CFG_USER         , @c_Date           , @CFG_USER
                    )

                SET @CFG_MSG = 'Configuration has been created.'            
            END
    END     

GO
4

2 回答 2

2

返回值的存储过程有一个声明为 OUTPUT 的参数,如下所示:

CREATE PROCEDURE my_returning_proc (@ret VARCHAR(10) OUTPUT) AS
BEGIN .... END

如果你想使用这个值,你需要像这样调用 STORED PROCEDURE:

DECLARE @var VARCHAR(10);
EXEC my_returning_proc @var OUTPUT;
PRINT @var

这里的关键是将 OUTPUT 添加到 EXEC 语句中

编辑:感谢您提供示例。对于您的情况,您可以像这样调用存储过程:

DECLARE @var_returned VARCHAR(250);
EXEC [dbo].[isp_CREATE_CONFIG] 'BLAH', 0, 'BLAH', 'BLAH', 'BLAH', ......, @var_returned OUTPUT
于 2013-01-11T03:59:59.480 回答
1

通过返回一个值,我假设您的意思是使用return. 您还可以为存储过程声明输出参数。

方法如下:

declare @retval int;

exec @retval = <stored procedure call>

这是一个任何人都可以尝试的简单代码示例:

create procedure dum as return 5

declare @retval int;

exec @retval = dum

select @retval

我一直使用这种技术从存储过程中返回状态。

于 2013-01-11T03:50:37.837 回答