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
回答
存儲過程不會作出「返回值」 - 這是您存儲功能。
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顯示的技術 - 您需要將輸出值轉換爲變量。
要調用存儲過程並檢索輸出參數,你這樣做(例如):
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
首先,你可以通過一個功能,如果你要返回一個值基礎上投入使用的不是一個存儲過程參數
如果SP返回小數時,你需要整 - 只投:SELECT (CAST @d AS INT)
但是這是非常危險的(可能的類型溢出)
我需要返回十進制來自sp。的值可能是 – shmandor 2010-08-05 07:34:58
@shmandor:你當前的sp有一個十進制輸出參數。這不夠嗎? @ AdaTheDev的答案是關於如何正確使用它。 param被聲明爲十進制,變量被聲明爲十進制。無處 – abatishchev 2010-08-05 08:12:12
如果列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語句
- 1. SQL Server存儲過程參數輸出
- 2. ADO.Net和存儲過程輸出參數
- 3. 存儲過程的輸出參數
- 4. MySQL的存儲過程:輸出參數
- 5. 使用輸入和輸出參數執行SQL存儲過程
- 6. 用EF 4.0調用存儲過程並使用輸出參數
- 7. 使用輸出參數調用Oracle存儲過程
- 8. 在VBScript中使用輸出參數調用SQL存儲過程
- 9. MySQL:如何僅使用輸出參數調用存儲過程?
- 10. 使用EF Core獲取存儲過程的輸出參數值?
- 11. 存儲存儲過程的結果而不使用輸出參數
- 12. 返回存儲過程的輸出參數另一個存儲過程
- 13. 使用輸入和輸出參數從PHP調用Oracle存儲過程
- 14. 將存儲過程輸出參數轉儲到DataGridView行中
- 15. 調用另一個存儲過程中包含參數和輸出參數的存儲過程?
- 16. 確定存儲過程中的輸入和輸出參數
- 17. 存儲過程同時具有輸入和輸出參數
- 18. 調用存儲過程的輸出參數
- 19. 如何調用存儲過程EF6與輸出參數
- 20. 調用存儲過程與輸出參數
- 21. 調用存儲過程忽略輸出參數
- 22. Grails調用帶輸出參數的存儲過程
- 23. 存儲過程的輸出參數通過iBATIS的
- 24. Oracle存儲過程的輸入參數
- 25. mysql存儲過程輸入參數值
- 26. 無法使用輸入和輸出參數執行存儲過程
- 27. 使用輸入輸出參數執行多個存儲過程的SQL任務
- 28. 輸出參數與表值函數的存儲過程?
- 29. 使用參數的存儲過程
- 30. 使用存儲過程的輸入參數調用SSIS包
什麼是你的問題? – 2010-08-05 07:19:25