ERROR_STATE (Transact-SQL)ERROR_STATE (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

TRY...CATCH 構造の CATCH ブロックが実行された原因となるエラーの状態番号を返します。Returns the state number of the error that caused the CATCH block of a TRY...CATCH construct to be run.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

ERROR_STATE ( )  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

戻り値の型Return Types

intint

戻り値Return Value

CATCH ブロックの中で呼び出された場合は、CATCH ブロックが実行された原因となるエラー メッセージの状態番号を返します。When called in a CATCH block, returns the state number of the error message that caused the CATCH block to be run.

CATCH ブロックの範囲外で呼び出された場合は NULL を返します。Returns NULL if called outside the scope of a CATCH block.

解説Remarks

エラー メッセージが MicrosoftMicrosoft SQL ServerSQL Server データベース エンジンDatabase Engineのコード内の複数の場所で生成される場合があります。Some error messages can be raised at multiple points in the code for the MicrosoftMicrosoft SQL ServerSQL Server データベース エンジンDatabase Engine. たとえば、異なる複数の条件で "1105" エラーが生成されることがあります。For example, an "1105" error can be raised for several different conditions. エラーを生成するそれぞれの条件によって、一意の状態コードが割り当てられます。Each specific condition that raises the error assigns a unique state code.

MicrosoftMicrosoft サポート技術情報などの既知の問題のデータベースを参照する際には、この状態番号を使用して、データベースに登録されている問題が、実際に発生したエラーと同じものかどうかを確認できます。When viewing databases of known issues, such as the MicrosoftMicrosoft Knowledge Base, you can use the state number to determine if the recorded issue might be the same as the error you have encountered. たとえば、技術情報の資料で取り上げられている 1105 エラー メッセージの状態番号が 2 で、実際の 1105 エラー メッセージの状態番号が 3 だった場合、そのエラーは、その資料で報告されているものとは別の原因で発生したと考えられます。For example, if a Knowledge Base article discusses an 1105 error message with a state of 2, and the 1105 error message you received had a state of 3, your error probably had a different cause than the one reported in the article.

また、SQL ServerSQL Server のサポート エンジニアは状態コードを使用して、エラーが発生したソース コード内の場所を探し、問題を診断することができます。A SQL ServerSQL Server support engineer can also use the state code from an error to find the location in the source code where that error is being raised, which may provide additional ideas on how to diagnose the problem.

ERROR_STATE は、CATCH ブロックのスコープ内の任意の場所で呼び出すことができます。ERROR_STATE may be called anywhere within the scope of a CATCH block.

ERROR_STATE は、実行された回数や実行される CATCH ブロックのスコープ内の場所に関係なく、エラー状態を返します。ERROR_STATE returns the error state regardless of how many times it is run, or where it is run within the scope of the CATCH block. これは、@@ERROR などの関数とは対照的です。これらの関数がエラー番号を返すのは、エラーが発生したステートメントの直後のステートメントか、CATCH ブロックの最初のステートメントだけです。This is in contrast to functions like @@ERROR, which only returns the error number in the statement immediately after the one that causes an error, or in the first statement of a CATCH block.

入れ子になった CATCH ブロックでは、ERROR_STATE は、参照されている CATCH ブロックのスコープに固有のエラー状態を返します。In nested CATCH blocks, ERROR_STATE returns the error state specific to the scope of the CATCH block in which it is referenced. たとえば、外側の TRY...CATCH 構造の CATCH ブロックには、TRY...CATCH 構造が入れ子にされている場合があります。For example, the CATCH block of an outer TRY...CATCH construct could have a nested TRY...CATCH construct. この場合、入れ子になった CATCH ブロック内では、ERROR_STATE は、入れ子になった CATCH ブロックを呼び出したエラーの状態を返します。Within the nested CATCH block, ERROR_STATE returns the state from the error that invoked the nested CATCH block. ERROR_STATE が外部の CATCH ブロックで実行された場合は、その CATCH ブロックを呼び出したエラーの状態が返されます。If ERROR_STATE is run in the outer CATCH block, it returns the state from the error that invoked that CATCH block.

Examples

A.A. CATCH ブロックで ERROR_STATE を使用するUsing ERROR_STATE in a CATCH block

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。The following example shows a SELECT statement that generates a divide-by-zero error. エラーの状態が返されます。The state of the error is returned.

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

B.B. CATCH ブロックで ERROR_STATE を他のエラー処理ツールと一緒に使用するUsing ERROR_STATE in a CATCH block with other error-handling tools

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。The following example shows a SELECT statement that generates a divide-by-zero error. エラーの状態と共にエラーに関する情報が返されます。Along with the error state, information that relates to the error is returned.

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 AnalyticsAzure Synapse AnalyticsParallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Parallel Data WarehouseParallel Data Warehouse

C.C. CATCH ブロックで ERROR_STATE を他のエラー処理ツールと一緒に使用するUsing ERROR_STATE in a CATCH block with other error-handling tools

次の例は、0 除算エラーを生成する SELECT ステートメントを示しています。The following example shows a SELECT statement that generates a divide-by-zero error. エラーの状態と共にエラーに関する情報が返されます。Along with the error state, information that relates to the error is returned.

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  

参照See Also

sys.messages (Transact-SQL) sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL) TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL) ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL) ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL) ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL) ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL) ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL) RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL) @@ERROR (Transact-SQL)
エラーとイベントのリファレンス (データベース エンジン)Errors and Events Reference (Database Engine)