SQL Server や T-SQL を初めて学ぶ人のための学習サイトです。 便利なクエリーやチューニングの仕方なども掲載しています。
SQL Server 入門
T-SQL 入門
便利なT-SQL&クエリー集
SQL Server&T-SQLに関するコラム
サイト情報
MCTS: SQL Server 2008, Database Development
サイト内検索
カスタム検索
ホーム > 便利なT-SQL&クエリー集 > SQL Server で意図的にエラーを起こす

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 番号が返ることがあげられます。



ホーム > 便利なT-SQL&クエリー集 > SQL Server で意図的にエラーを起こす

© 2014 SQL Server 入門