SQL Server で意図的にエラーを起こす
SQL Server で意図的にエラーを起こすには?
予期せぬエラーが起こった際のログ機能などとテストするために、意図的にエラーを起こしたい時や、想定と違ったデータが保存されそうになった時に、エラーを起こしてでも処理をロールバックさせたいような状況、なくはないですよね。
今回はそんな時に使える、SQL Server で意図的にエラーを起こす方法をご紹介します。
RAISERROR を使ってエラーを起こす
RAISERROR を使ってシンプルにエラーを起こすクエリーは以下の通りです。
RAISERROR ([error_message], [severity], [state]);
例えば、severity 16 で、Error!!! というエラーメッセージでエラーを起こしたい場合は次のようにします。
エラーの内容については 「 SQL Server のエラーメッセージを理解する 」 をご覧ください。
THROW を使ってエラーを起こす
SQL Server 2012 以降は THROW ステートメントが追加され、RAISERROR よりもTHROW を使うことが推奨されています。
THROW [error_number], [error_message], [state];
同様に Error!!! というエラーメッセージでエラーを起こしたい場合は次のようにします。
THROW の severity は常に 16 で、error_number には 50000 以上で 2147483647 以下の整数を設定できます。
CATCH セクションではを THROW が便利
TRY CATCH の CATCH セクションで何か処理をした後に、オリジナルのエラーを返す為にエラーを起こすには、RAISERROR も使えますが、THROW を使うほうが便利です。
■ RAISERROR でエラーを返した例
■ THROW でエラーを返した例
THROW を使う利点としては、RAISERROR のように Severity 等の値を取得して、引数として渡さなくてもよいことや、実際にエラーが起こった Line 番号が返ることがあげられます。