ERROR_STATE (Transact-SQL)

Devuelve el número de estado del error que provocó que se ejecutara el bloque CATCH de una construcción TRY…CATCH.

Sintaxis

ERROR_STATE()

Tipos de valor devueltos

int

Valor devuelto

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.

Devuelve NULL si se llamó fuera del ámbito de un bloque CATCH.

Notas

Algunos mensajes de error se pueden generar en varios puntos del código del Database Engine (Motor de base de datos) de SQL Server de Microsoft. Por ejemplo, el error "1105" se puede generar bajo diferentes condiciones. Cada condición específica que genera el error asigna un código de estado único.

Cuando se ven las bases de datos de problemas conocidos, como Microsoft 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. 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.

Un ingeniero de soporte técnico de SQL 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.

ERROR_STATE puede llamarse en cualquier lugar del ámbito de un bloque CATCH.

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. En cambio, las funciones como @@ERROR sólo devuelven el número de error en la instrucción inmediatamente posterior a la que produjo el error o en la primera instrucción de un bloque CATCH.

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. Por ejemplo, el bloque CATCH de una construcción TRY...CATCH externa podría tener una construcción TRY...CATCH anidada. En el bloque CATCH anidado, ERROR_STATE devuelve el estado del error que invocó el bloque CATCH anidado. Si ERROR_STATE se ejecuta en el bloque CATCH externo, devuelve el estado del error que invocó ese bloque CATCH.

Ejemplos

A. Utilizar ERROR_STATE en un bloque CATCH

En el siguiente ejemplo se muestra una instrucción SELECT que genera un error de división por cero. Se devuelve el estado del error.

USE AdventureWorks;
GO

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

B. Utilizar ERROR_STATE en un bloque CATCH con otras herramientas de control de errores

En el siguiente ejemplo se muestra una instrucción SELECT que genera un error de división por cero. Además del estado de error, se devuelve otra información relacionada con el error.

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

Vea también

Referencia

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)

Otros recursos

Recuperar información de errores en Transact-SQL
Usar TRY...CATCH en Transact-SQL
Usar RAISERROR
Usar @@ERROR
Niveles de gravedad de error del motor de base de datos

Ayuda e información

Obtener ayuda sobre SQL Server 2005