2011-09-09 40 views
1

我有一個存儲過程這樣的,爲什麼我無法從SQL Server 2008中的存儲過程獲取返回值?

USE MyDataBaseName 
GO 
CREATE PROCEDURE h_sp_find_exist 
@in_name varchar,@in_counterparty varchar, 
@out_recordsNum int OUTPUT 
AS 
BEGIN 
SELECT @out_recordsNum = COUNT(*) 
    FROM TMyTableName 
    WHERE [email protected]_name AND [email protected]_counterparty 
RETURN @out_recordsNum 
END 

我總是從返回值得0。 它有什麼問題?

的執行代碼:

use MyDataBaseName 
go 
declare @retRecordNum int 
execute h_sp_find_exist 'myName', '50139', @retRecordNum OUTPUT 
select @retRecordNum as 'RecordNumber' 

,如果我只是運行的SQL代碼, SELECT COUNT(*) 其中name = 'MYNAME' 和對手= '50139',它的工作原理,並且結果是1

+1

你不需要返回分配。你能顯示代碼如何讀取值嗎? – ibram

+0

你如何檢查返回的值? – Leonid

+0

如果您只需要一個輸出,則不需要輸出參數。 – ibram

回答

5

您的輸入參數正在被截斷,因爲您沒有爲varchar提供長度,並且default is 1。 (您也正如其他人所說,不需要return語句):

CREATE PROCEDURE h_sp_find_exist 
@in_name varchar(20),@in_counterparty varchar(20), --<-- changes here 
@out_recordsNum int OUTPUT 
AS 
BEGIN 
SELECT @out_recordsNum = COUNT(*) 
    FROM TMyTable 
    WHERE [email protected]_name AND [email protected]_counterparty 
END 

Return設置了存儲過程的退出代碼。這隻能是一個整數,通常用來表示成功或失敗。你可以作爲你的exec語句的一部分分配給它獲得從返回值:

declare @retRecordNum int 
declare @returnCode int 
execute @returnCode = h_sp_find_exist 'myName', '50139', @retRecordNum OUTPUT 
select @retRecordNum as 'RecordNumber' 

這裏,@returnCode將任何值傳遞給return聲明

+0

非常感謝,你是對的。 – CCC

0

寫您的End外側返回,並嘗試

USE MyTable 
GO 
CREATE PROCEDURE h_sp_find_exist 
@in_name varchar,@in_counterparty varchar, 
@out_recordsNum int OUTPUT 
AS 
BEGIN 
SELECT @out_recordsNum = COUNT(*) 
    FROM TMyTable 
    WHERE [email protected]_name AND [email protected]_counterparty 
END 
RETURN @out_recordsNum 
+0

嗨,它仍然有問題。我認爲這是分配表達問題。謝謝 – CCC

+0

雅,@iAsk按照ibram所說的,不要放任何輸出參數並嘗試。事實上,之前曾嘗試過 –

+0

。仍是同樣的問題。 – CCC

0

設置@output =(選擇從表COUNT(*))

+0

這是我第一次嘗試。但我也得到錯誤的值0. – CCC

相關問題