※ ChatGPTを利用し、要約された質問です(原文:@@ERRORと@@ROWCOUNT併用について)
@@ERRORと@@ROWCOUNT併用について
このQ&Aのポイント
ストアドプロシージャ内で@@ERRORと@@ROWCOUNTを併用して使用する際の問題について
@@ERRORと@@ROWCOUNTの使用方法によって、正しい結果が得られない場合があることを示しました
エラーハンドリングと@@ROWCOUNTの順序によって、エラーが検出されずに不正な結果が返される可能性があることに留意してください
ストアドプロシージャ内で@@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/default.asp?url=/japan/msdn/library/ja/acdata/ac_8_con_05_8oc2.asp
お礼
ありがとうございます!ものの見事にうまくいきました。勉強になりました。それにしても、msdnのURLに記述されている例はなんなんでしょう。