2011-09-09 11 views
1

私は常に戻り値から0を得る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 

、次のようにストアドプロシージャを持っています。 何が問題なのですか?

実行コード:

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

私はSQLコードを実行した場合、 SELECT COUNT(*)は名前= 'がmyName' とカウンターパーティ= '50139' はそれが動作 、その結果が1であります

+1

に渡されたどんな値が割り当てられます。値をどのように読み取るかコードを表示できますか? – ibram

+0

返された値はどのようにチェックされますか? – Leonid

+0

出力が1つだけ必要な場合は、出力パラメータなしで実行します。 – 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外のあなたのリターンを書くと、(テーブルからSELECT COUNT(*))

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 =を試してみてください

+0

これは私の最初の試み実際にです。しかし、私はまた、間違った価値0を取得します。 – CCC