SQLServerのストアドで例外処理を行うサンプルです。
TRY~CATCH構文を使用します。
構文
- (TRY~CATCH構文)
- BEGIN --TRYエリア BEGIN TRY 処理 END TRY --CATCHエリア BEGIN CATCH 例外時の処理 END CATCH END
CATCHエリア内では以下の関数で例外情報が取得できます。
関数名 | 説明 |
---|---|
ERROR_NUMBER() | エラーの番号を取得する |
ERROR_SEVERITY() | エラーの重大度を取得する |
ERROR_STATE() | エラーの状態番号を取得する |
ERROR_PROCEDURE() | エラーが発生したストアドプロシージャ名またはトリガー名を取得する |
ERROR_LINE() | エラーが発生した位置の行番号を取得する |
ERROR_MESSAGE() | エラーメッセージを取得する |
ERROR_MESSAGE() | エラーメッセージを取得する |
サンプル
例)TRY~CATCH構文のサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
BEGIN BEGIN TRY -- DECLARE @aa int = CONVERT(int, '123') --エラーにならないパターン DECLARE @aa int = CONVERT(int, 'AAA') --エラーになるパターン PRINT @aa END TRY BEGIN CATCH PRINT ERROR_NUMBER() PRINT ERROR_SEVERITY() PRINT ERROR_STATE() PRINT ERROR_PROCEDURE() PRINT ERROR_LINE() PRINT ERROR_MESSAGE() END CATCH END |
- (結果例:3行目を有効、4行目を無効にした場合)
- 123
- (結果例:3行目を無効、4行目を有効にした場合)
- 245 16 1 3 varchar の値 'AAA' をデータ型 int に変換できませんでした。
備考
- TRY~CATCHでは重大度が10を超えるエラーがCATCH対象になります。