- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TRANSACT-SQLでのシステムエラーの検知)
TRANSACT-SQLでのシステムエラーの検知
このQ&Aのポイント
- TRANSACT-SQLでの処理中に発生したシステムエラーを検知する方法について説明します。
- (1)~(3)で発生したエラーをCATCHで共通的に処理することができるのかについて、詳細を検討します。
- エラー処理は通常は発生しないオーバーヘッドやディスクの破損などの例外的な状況に対応するためのものであるため、実現が困難である場合もあります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>GOTO 異常終了処理 でcatchブロックの外へ飛ばしてからエラーメッセージを取得できるのかな? http://msdn.microsoft.com/ja-jp/library/ms179296.aspx をみると、 「 ・・・ エラー関数 ・・・ ERROR_MESSAGE() はエラー メッセージのテキストの全文を返します。 ・・・ TRY...CATCH 構造の CATCH ブロックのスコープ内であれば、←ここ! どこからでもこれらの関数を使用してエラー情報を取得できます。 ・・・ 」 とあります。 gotoで飛ばすとCATCH ブロックのスコープ外になりませんか? 一般にはgotoを使わず、以下のようにすると思います。 ・・・ UPDATE処理 ↓ エラー発生(3) COMMIT CATCH ログ出力(エラーメッセージ) ロールバック END ※エラー発生(3)までのエラーがおきなければ、COMMITされ、CATCH~ENDは実行されません。 あと、DBとの接続が切られるようなエラーのときは、Catch以下を実行せずに切断されてしまうようです。(ハードエラーでDBが落ちたときとかかな) 詳細は、上記で参照しているサイトをみてください。 だいたいの例文はあると思います。
お礼
ありがとうございます! 助かりました!