ERROR_MESSAGE (Transact-SQL)

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

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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