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

SE APLICA A: síSQL Server noAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Devuelve el número de estado del error que provocó que se ejecutara el bloque CATCH de una construcción TRY…CATCH.Returns the state number of the error that caused the CATCH block of a TRY...CATCH construct to be run.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

ERROR_STATE ( )  

Tipos devueltosReturn Types

intint

Valor devueltoReturn Value

Cuando se llama en un bloque CATCH, devuelve el número de estado del mensaje de error que provocó que el bloque CATCH se ejecutara.When called in a CATCH block, returns the state number of the error message that caused the CATCH block to be run.

Devuelve NULL si se le llama desde fuera del ámbito del bloque CATCH.Returns NULL if called outside the scope of a CATCH block.

NotasRemarks

Algunos mensajes de error se pueden generar en varios puntos del código de MicrosoftMicrosoft SQL ServerSQL Server Motor de base de datosDatabase Engine.Some error messages can be raised at multiple points in the code for the MicrosoftMicrosoft SQL ServerSQL Server Motor de base de datosDatabase Engine. Por ejemplo, el error "1105" se puede generar bajo diferentes condiciones.For example, an "1105" error can be raised for several different conditions. Cada condición específica que genera el error asigna un código de estado único.Each specific condition that raises the error assigns a unique state code.

Cuando se ven las bases de datos de problemas conocidos, como MicrosoftMicrosoft Knowledge Base, puede utilizar el número de estado para determinar si el problema registrado puede ser el mismo que el error que ha encontrado.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. Por ejemplo, si un artículo de Knowledge Base trata un mensaje de error 1105 con un estado de 2 y el mensaje de error 1105 que recibió tiene un estado de 3, probablemente su error tiene un origen distinto del registrado en el artículo.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.

Un ingeniero de soporte técnico de SQL ServerSQL Server también puede utilizar el código de estado de un error para encontrar la ubicación en el código de origen donde se ha producido ese error, que puede proporcionar ideas adicionales sobre cómo diagnosticar el problema.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 puede llamarse en cualquier lugar del ámbito de un bloque CATCH.ERROR_STATE may be called anywhere within the scope of a CATCH block.

ERROR_STATE devuelve el estado de error independientemente de las veces que se ejecute o de dónde se ejecute en el ámbito del bloque 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. Esto contrasta con funciones como @@ERROR, que solo devuelve el número de error en la instrucción inmediatamente posterior a la que causa un error, o en la primera instrucción de un bloque 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.

En los bloques CATCH anidados, ERROR_STATE devuelve el estado de error específico del ámbito del bloque CATCH en el que se hace referencia al mismo.In nested CATCH blocks, ERROR_STATE returns the error state specific to the scope of the CATCH block in which it is referenced. Por ejemplo, el bloque CATCH de una construcción TRY...CATCH externa podría tener una construcción TRY...CATCH anidada.For example, the CATCH block of an outer TRY...CATCH construct could have a nested TRY...CATCH construct. En el bloque CATCH anidado, ERROR_STATE devuelve el estado del error que invocó el bloque CATCH anidado.Within the nested CATCH block, ERROR_STATE returns the state from the error that invoked the nested CATCH block. Si ERROR_STATE se ejecuta en el bloque CATCH externo, devuelve el estado del error que invocó ese bloque CATCH.If ERROR_STATE is run in the outer CATCH block, it returns the state from the error that invoked that CATCH block.

EjemplosExamples

A.A. Utilizar ERROR_STATE en un bloque CATCHUsing ERROR_STATE in a CATCH block

En este ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero.The following example shows a SELECT statement that generates a divide-by-zero error. Se devuelve el estado del 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. Utilizar ERROR_STATE en un bloque CATCH con otras herramientas de control de erroresUsing ERROR_STATE in a CATCH block with other error-handling tools

En este ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero.The following example shows a SELECT statement that generates a divide-by-zero error. Además del estado de error, se devuelve otra información relacionada con el 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  

Ejemplos: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse and Almacenamiento de datos paralelosParallel Data Warehouse

C.C. Utilizar ERROR_STATE en un bloque CATCH con otras herramientas de control de erroresUsing ERROR_STATE in a CATCH block with other error-handling tools

En este ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero.The following example shows a SELECT statement that generates a divide-by-zero error. Además del estado de error, se devuelve otra información relacionada con el 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  

Consulte tambiénSee 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)
Referencia de errores y eventos (Motor de base de datos)Errors and Events Reference (Database Engine)