2013-01-11 74 views
0

我有一個問題,我有一個存儲過程返回一個值。此存儲過程正在另一個SP中執行,我需要將該值傳送到此SP中。我怎樣才能做到這一點。如何將值從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

返回值存儲過程具有聲明爲OUTPUT參數,像這樣:

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

如果你想使用這個值,你需要調用存儲過程是這樣的:

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 
+0

謝謝,我錯過了OUTPUT部分。 – jorame

1

通過返回一個值,我假設你的意思是使用return。您還可以爲存儲過程聲明輸出參數。

方法如下:

declare @retval int; 

exec @retval = <stored procedure call> 

下面是一個簡單的代碼示例任何人都可以嘗試:

create procedure dum as return 5 

declare @retval int; 

exec @retval = dum 

select @retval 

我使用這種技術所有的時間來從存儲過程返回狀態。

+0

我不相信這樣的 – cha

+0

存儲過程返回值,讓我張貼的代碼示例 – jorame

+0

嗯。爲什麼不MSDN(http://msdn.microsoft.com/en-us/library/ms187926.aspx)說,過程可以返回值? – cha