プロが教える店舗&オフィスのセキュリティ対策術

ストアドプロシージャ内で@@ERRORと@@ROWCOUNTを併用で使用しています。下記URLでは問題ないかの様に記述されていますが、当方の環境では×です。下記の様なストアドです。
declare @errNo int
insert into ~
set @errNo = @@ERROR
if ( @errNo <> 0 )
return @errNo
if ( @@ROWCOUNT = 0 )
return 100
上記では、insert時のエラーは取得でき、@@ROWCOUNTは正常に1件挿入された場合でも、0が取得され、結果return 100が返される事になります。おそらく、@@ROWCOUNTの前でエラーハンドリングしている為、そこでリセット?されていると思われます。逆に、@@ROWCOUNTのハンドリングをエラーハンドリングより前にすると、今度は@@ROWCOUNTは正常に挿入された数が返ってくるものの、エラーハンドリングはされません。(おそらく、@@ROWCOUNTのハンドリング時に@@ERRORがリセットされる為と思われる。)この様な場合どうすればいいのでしょう?因みに以下のURLではOKらしいですが。。。
http://www.microsoft.com/japan/msdn/library/defa …

A 回答 (1件)

こうしてください。



declare @errNo int
declare @rowcnt int

insert into ~
--↓ここでいっぺんに変数に格納してしまう
select @errNo = @@ERROR,@rowcnt = @@ROWCOUNT

if ( @errNo <> 0 ) --@@ERRORではない
return @errNo
if ( @@rowcnt = 0 ) --@@ROWCOUNTではない
return 100
    • good
    • 2
この回答へのお礼

ありがとうございます!ものの見事にうまくいきました。勉強になりました。それにしても、msdnのURLに記述されている例はなんなんでしょう。

お礼日時:2004/12/24 19:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す