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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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
関連項目