SQL Server で意図的にエラーを起こす

SQL Server で意図的にエラーを起こすには?

予期せぬエラーが起こった際のログ機能などとテストするために、意図的にエラーを起こしたい時や、想定と違ったデータが保存されそうになった時に、エラーを起こしてでも処理をロールバックさせたいような状況、なくはないですよね。

今回はそんな時に使える、SQL Server で意図的にエラーを起こす方法をご紹介します。

RAISERROR を使ってエラーを起こす

RAISERROR を使ってシンプルにエラーを起こすクエリーは以下の通りです。

RAISERROR ([error_message], [severity], [state]);


例えば、severity 16 で、Error!!! というエラーメッセージでエラーを起こしたい場合は次のようにします。

RAISERROR ('Error!!!', 16, 1);

SQL Server で意図的にエラーを起こす 1

エラーの内容については 「 SQL Server のエラーメッセージを理解する 」 をご覧ください。


THROW を使ってエラーを起こす

SQL Server 2012 以降は THROW ステートメントが追加され、RAISERROR よりもTHROW を使うことが推奨されています。

THROW [error_number], [error_message], [state];


同様に Error!!! というエラーメッセージでエラーを起こしたい場合は次のようにします。

THROW 50000, 'Error!!!', 1;

SQL Server で意図的にエラーを起こす 2

THROW の severity は常に 16 で、error_number には 50000 以上で 2147483647 以下の整数を設定できます。

CATCH セクションではを THROW が便利

TRY CATCH の CATCH セクションで何か処理をした後に、オリジナルのエラーを返す為にエラーを起こすには、RAISERROR も使えますが、THROW を使うほうが便利です。

■ RAISERROR でエラーを返した例

SQL Server で意図的にエラーを起こす 3

■ THROW でエラーを返した例

SQL Server で意図的にエラーを起こす 4

THROW を使う利点としては、RAISERROR のように Severity 等の値を取得して、引数として渡さなくてもよいことや、実際にエラーが起こった Line 番号が返ることがあげられます。

© 2010-2024 SQL Server 入門