SQL Server 2005 に新しく追加された try catch は簡単に例外をキャッチできるので、今日はこれを見て、
基本的な使い方の
要点を以下にまとめます。
{ SQL_ステートメント |
ステートメントブロック }
終了トライ
捕獲を開始する
{ SQL_ステートメント |
ステートメントブロック }
エンドキャッチ
, 通常の言語での例外処理の使用法と似ていますが、SQL SERVER はデータベースに接続できないなどの重大な例外のみをキャッチすることができないことに注意してください。試してみましょう
@X INT を宣言する
-- ゼロで除算するとエラーが発生します
SET @X = 1/0
PRINT 'TRY ブロックのエラー後のコマンド'
終了トライ
捕獲を開始する
PRINT 'エラーが検出されました'
エンドキャッチ
PRINT 'TRY/CATCH ブロック後のコマンド'
さらに、try catch は Begin TRY にネストできます。
Name = 'John Smith' の GrandParent から削除
print '祖父母は正常に削除されました'
試行を終了する
キャッチを開始する
「祖父母レコードの削除中にエラーが発生しました」を印刷する
試してみましょう
GrandParentID = の親から削除
(名前 = 'John Smith' の GrandParent から別の ID を選択してください)
「親は正常に削除されました」を印刷する
試行を終了する
キャッチを開始する
print '親の削除エラー'
試してみましょう
ParentId = の子から削除
(GrandParentID = の場合、親から別の ID を選択してください
(名前 = 'John Smith' の GrandParent から別の ID を選択してください))
print '子は正常に削除されました'
試行を終了する
キャッチを開始する
「子の削除エラー」を印刷
エンドキャッチ
エンドキャッチ
エンドキャッチ
さらに、SQL SERVER 2005 では、デバッグを容易にするために例外メカニズムにエラー クラス メソッドが用意されています。これは比較的単純なので説明しません。ERROR_SEVERITY():エラーの重大度を返します。ERROR_STATE(): エラーに関連付けられたエラー状態番号を返します。ERROR_PROCEDURE(): エラーが発生したストアド プロシージャまたはトリガーの名前を返します。ERROR_LINE(): ファイル内の行番号を返します。 ERROR_MESSAGE(): エラー メッセージの完全なテキストを返します。テキストには、長さ、オブジェクト名、時間などの置換可能なパラメータが含まれます。最後の例は次のとおりです。エラークラスメソッド BEGIN TRY を使用する
@X INT を宣言する
-- ゼロで除算するとエラーが発生します
SET @X = 1/0
PRINT 'TRY ブロックのエラー後のコマンド'
終了トライ
捕獲を開始する
PRINT 'エラーが検出されました'
SELECT ERROR_NUMBER() ER番号、
ERROR_SEVERITY() エラーの重大度、
ERROR_STATE() エラー状態、
ERROR_PROCEDURE() エラー_プロシージャ、
ERROR_LINE() エラーライン、
ERROR_MESSAGE() エラーメッセージ
エンドキャッチ
PRINT 'TRY/CATCH ブロック後のコマンド'
最後に「エラーが検出されました」と出力します。
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- --------- ------- ----------------------------------
8134 16 1 NULL 4 ゼロ除算エラーが発生しました。
出典: jackyrong BLOG。