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対象になります。