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 の使用
データベース エンジン エラーの重大度