ERROR_STATE (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

TRY...CATCH 構造の CATCH ブロックが実行された原因となるエラーの状態番号を返します。

Transact-SQL 構文表記規則

構文

ERROR_STATE ( )  

Note

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

戻り値の型

int

戻り値

CATCH ブロックの中で呼び出された場合は、CATCH ブロックが実行された原因となるエラー メッセージの状態番号を返します。

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

解説

エラー メッセージが Microsoft SQL Server データベース エンジンのコード内の複数の場所で生成される場合があります。 たとえば、異なる複数の条件で "1105" エラーが生成されることがあります。 エラーを生成するそれぞれの条件によって、一意の状態コードが割り当てられます。

Microsoft サポート技術情報などの既知の問題のデータベースを参照する際には、この状態番号を使用して、データベースに登録されている問題が、実際に発生したエラーと同じものかどうかを確認できます。 たとえば、技術情報の資料で取り上げられている 1105 エラー メッセージの状態番号が 2 で、実際の 1105 エラー メッセージの状態番号が 3 だった場合、そのエラーは、その資料で報告されているものとは別の原因で発生したと考えられます。

また、SQL Server のサポート エンジニアは状態コードを使用して、エラーが発生したソース コード内の場所を探し、問題を診断することができます。

ERROR_STATE は、CATCH ブロックのスコープ内の任意の場所で呼び出すことができます。

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

入れ子になった CATCH ブロックでは、ERROR_STATE は、参照されている CATCH ブロックのスコープに固有のエラー状態を返します。 たとえば、外側の TRY...CATCH 構造の CATCH ブロックには、TRY...CATCH 構造が入れ子にされている場合があります。 この場合、入れ子になった CATCH ブロック内では、ERROR_STATE は、入れ子になった CATCH ブロックを呼び出したエラーの状態を返します。 ERROR_STATE が外部の CATCH ブロックで実行された場合は、その CATCH ブロックを呼び出したエラーの状態が返されます。

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

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。 エラーの状態が返されます。

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

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

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。 エラーの状態と共にエラーに関する情報が返されます。

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  

例: Azure Synapse Analytics、Analytics Platform System (PDW)

C. CATCH ブロックで ERROR_STATE を他のエラー処理ツールと一緒に使用する

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。 エラーの状態と共にエラーに関する情報が返されます。

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_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

参照

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
エラーおよびイベント リファレンス (データベース エンジン)