ERROR_MESSAGE (Transact-SQL)

TRY...CATCH 構造の CATCH ブロックが実行される原因となったエラーのメッセージ テキストを返します。

構文

ERROR_MESSAGE()

戻り値の型

nvarchar(2048)

戻り値

CATCH ブロック内で呼び出された場合は、CATCH ブロックが実行される原因となったエラー メッセージの全テキストを返します。このテキストには、長さ、オブジェクト名、回数など、置き換え可能なパラメータに提供される値が含まれます。

CATCH ブロックの範囲外で呼び出された場合は NULL を返します。

解説

ERROR_MESSAGE は、CATCH ブロックのスコープ内であればどこでも呼び出すことができます。

ERROR_MESSAGE では、実行される回数や、CATCH ブロックのスコープ内のどこで実行されるかに関係なく、エラー メッセージが返されます。これは、@@ERROR のような関数とは対照的です。@@ERROR 関数では、エラーが発生したステートメントの直後のステートメント、または CATCH ブロックの最初のステートメントでエラー番号が返されます。

入れ子にされた CATCH ブロックでは、ERROR_MESSAGE によって、参照される CATCH ブロックのスコープ固有のエラー メッセージが返されます。たとえば、外側の TRY...CATCH 構造の CATCH ブロックには、TRY...CATCH 構造が入れ子にされている場合があります。入れ子にされた CATCH ブロックでは、ERROR_MESSAGE によって、入れ子にされた CATCH ブロックを起動したエラーのメッセージが返されます。ERROR_MESSAGE が外側の CATCH ブロックで実行された場合は、その CATCH ブロックを起動したエラーのメッセージが返されます。

A. CATCH ブロックで ERROR_MESSAGE を使用する

次の例では、0 除算エラーを生成する SELECT ステートメントを示します。ここではエラーのメッセージが返されます。

USE AdventureWorks;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

B. CATCH ブロックで、別のエラー処理ツールと一緒に ERROR_MESSAGE を使用する

次の例では、0 除算エラーを生成する SELECT ステートメントを示します。ここではエラー メッセージと共に、エラーに関連する情報が返されます。

USE AdventureWorks;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

参照

関連項目

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)

その他の技術情報

Transact-SQL のエラー情報の取得
Transact-SQL での TRY...CATCH の使用
RAISERROR の使用
データベース エンジン エラーの重大度

ヘルプおよび情報

SQL Server 2005 の参考資料の入手