データベース エンジン エラーの処理

SQL Server データベース エンジンで発生する多くのエラーは、プログラムでキャプチャして、解決することができます。Transact-SQL 言語、またはアプリケーションでデータベース エンジンに格納されているデータへのアクセスに使用されるデータ アクセス アプリケーション プログラミング インターフェイス (API) を使用して、エラーを処理できます。

データベース エンジンで発生するエラーは、次の 2 つのレベルで処理できます。

  • Transact-SQL バッチ、ストアド プロシージャ、トリガ、またはユーザー定義関数にエラー処理コードを追加することにより、データベース エンジンでエラーを処理できます。Transact-SQL のエラー処理メカニズムには、TRY...CATCH 構造 (「TRY...CATCH (Transact-SQL)」を参照)、RAISERROR ステートメント、および @@ERROR 関数などがあります。
  • 呼び出し元のアプリケーションにエラーを返し、そのアプリケーションのコードでエラーを処理することができます。データベース エンジンへのアクセス用にアプリケーションが使用する各 API には、エラー情報をアプリケーションに渡すためのメカニズムが用意されています。
トピック 説明

データベース エンジン エラーについて

すべてのデータベース エンジン エラーには、エラー番号、メッセージ文字列、重大度、状態、プロシージャ名、および行番号が含まれています。

Transact-SQL のエラー情報の取得

Transact-SQL コードでは、ERROR_LINE 関数、ERROR_MESSAGE 関数、ERROR_NUMBER 関数、ERROR_PROCEDURE 関数、ERROR_SEVERITY 関数、ERROR_STATE 関数、および @@ERROR 関数を使用して、エラーに関する情報を取得できます。

Transact-SQL での TRY...CATCH の使用

SQL Server 2005 には、Microsoft Visual C++ 言語や Microsoft Visual C# 言語の例外処理機能と同様の TRY...CATCH 構造を使用して Transact-SQL コードでエラーを処理する機能が導入されています。TRY ブロックでエラー状態が検出されると、CATCH ブロックに制御が渡され、そこでエラーが処理されます。これは、SQL Server 2005 データベース エンジンにおけるエラー処理の主要なメカニズムです。

RAISERROR の使用

RAISERROR ステートメントを使用してユーザー定義エラーを発生させることができます。また、このステートメントを CATCH ブロックで使用すると、CATCH ブロックで処理されるエラーをアプリケーションに渡すことができます。

PRINT の使用

PRINT ステートメントを使用すると、ユーザー定義メッセージをアプリケーションに返せます。

@@ERROR の使用

以前のバージョンの SQL Server では、@@ERROR 関数が Transact-SQL ステートメントでエラーを検出する場合の主要な手段でした。TRY...CATCH 構造により、エラー検出機能が強化されました。

アプリケーションでのエラーとメッセージの処理

ADO (ActiveX Data Objects)、OLE DB、および ODBC (Open Database Connectivity) などの各データ アクセス API には、データベース エンジンで発生したエラー情報をアプリケーションに知らせるメカニズムが備わっています。

データベース エンジン エラーの重大度

データベース エンジン エラーおよびユーザー定義エラー メッセージには、1 ~ 25 の重大度が設定されています。ユーザー定義エラー メッセージを生成するには、sp_addmessage と RAISERROR を使用します。

参照

その他の技術情報

sys.messages (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手