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.
Convenciones de sintaxis de Transact-SQL
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.
Comentarios
Algunos mensajes de error se pueden generar en varios puntos del código del 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 solo 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
El siguiente ejemplo muestra una instrucción SELECT que genera un error de división por cero. Se devuelve el estado del error.
USE AdventureWorks2012;
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
El siguiente ejemplo 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 AdventureWorks2012;
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