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

ここで重要なのは、EXEC ステートメントに OUTPUT を追加することです。

編集:例を提供してくれてありがとう。あなたの場合、次のようにストアド プロシージャを呼び出します。

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 に答える