2010-08-05 194 views
1
ALTER PROCEDURE dbo.StoredProcedure8 
@emp_code bigint, 
@co_id bigint, 
@p decimal(8,2) output 

AS 

SELECT @p = (select sum(tran_value) from emp_ded_ben_trans where [email protected]_code and [email protected]_id and period_flg=2 and tax_flg=0) 

RETURN 
+6

什麼是你的問題? – 2010-08-05 07:19:25

回答

2

存儲過程不會作出「返回值」 - 這是您存儲功能。

CREATE FUNCTION dbo.CalculateSomething 
    (@emp_code bigint, @co_id bigint) 
RETURNS DECIMAL(8, 2) 
AS BEGIN  
    RETURN 
     (SELECT SUM(tran_value) 
     FROM dbo.emp_ded_ben_trans 
     WHERE 
      emp_code = @emp_code AND co_id = @co_id 
      AND period_flg = 2 AND tax_flg = 0) 
END 

然後,您可以調用這個存儲功能是這樣的:

SELECT dbo.CalculateSomething(value_for_emp_code, value_for_co_id) 

,並取回從計算一個DECIMAL(8,2)。

存儲過程將返回受其操作影響的行數 - INT。

如果您需要從存儲過程中返回一個值,則需要使用OUTPUT參數類型並使用AdaTheDev顯示的技術 - 您需要將輸出值轉換爲變量。

5

要調用存儲過程並檢索輸出參數,你這樣做(例如):

DECLARE @p DECIMAL(8,2) 
EXECUTE dbo.StoredProcedure8 123, 456, @p OUTPUT 
-- @p now contains the output value 

更新:

使用RETURN你不需要 - 你是對的,RETURN只能返回一個INTEGER。但是返回值與您實際使用的OUTPUT參數不同。

即得到一個存儲過程返回值是不同的語法:

DECLARE @Result INTEGER 
EXECUTE @Result = SomeSproc 
+0

我需要返回十進制值。當輸出值爲intger時,使用return @p ...... 我該怎麼做才能返回十進制值 – shmandor 2010-08-05 07:25:45

+1

@shmandor - 請參閱我的回答中的更新 – AdaTheDev 2010-08-05 08:43:46

0

首先,你可以通過一個功能,如果你要返回一個值基礎上投入使用的不是一個存儲過程參數

如果SP返回小數時,你需要整 - 只投:SELECT (CAST @d AS INT)但是這是非常危險的(可能的類型溢出)

+0

我需要返回十進制來自sp。的值可能是 – shmandor 2010-08-05 07:34:58

+1

@shmandor:你當前的sp有一個十進制輸出參數。這不夠嗎? @ AdaTheDev的答案是關於如何正確使用它。 param被聲明爲十進制,變量被聲明爲十進制。無處 – abatishchev 2010-08-05 08:12:12

0

如果列tran_value是小數類型,則@p將運行查詢後有十進制值...

Create Table #test 
(ID1 Int, 
ID2 Decimal(8,2) 
) 

Insert into #test Values (1,1.1) 
Insert into #test Values (2,2.2) 
Insert into #test Values (3,3.3) 

Declare @p Decimal(8,2), @intp int 

Select @intp = Sum(ID1), @p = Sum(ID2) from #test 

Select @intp as IntegerSum, @p as DecimalSum 

Drop Table #test 

輸出

IntegerSum DecimalSum 
----------- --------------------------------------- 
6   6.60 

注意:您不需要有做任何特定的事情來通過輸出參數返回存儲過程的值...只需將值分配給SP內的輸出參數,它就會自動返回給調用者。

這意味着你的SP是正確的,即使沒有return語句