如何将值从SP传递给SP?

时间:2013-01-11 03:48:12

标签: sql tsql stored-procedures

我有一个问题,我有一个存储过程,它返回一个值。此存储过程正在另一个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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

以下是:

declare @retval int;

exec @retval = <stored procedure call>

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

create procedure dum as return 5

declare @retval int;

exec @retval = dum

select @retval

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