Leí que ERROR_STATE()
puede ayudar a distinguir entre diferentes estados / ubicaciones en el código fuente donde puede ocurrir el mismo tipo de error. Pero no está realmente claro para mí cómo puede ser útil.
Estados de MSDN:
ERROR_STATE()
Devuelve el número de estado del error que provocó la ejecución del bloque CATCH de una construcción TRY ... CATCH.
¿Cómo se puede usar realmente? ¿Puede alguien darme un ejemplo, los que se proporcionan en este artículo de referencia realmente no ayudan a explicarme las cosas bien?
sql-server
sql-server-2008
error-handling
jaczjill
fuente
fuente
Error_State
y laError_Number
combinación le dará una imagen más clara sobre un error. Eche un vistazo a otras funciones relacionadas con el manejo de errores aquíRespuestas:
El propósito de los estados de error de SQL Server es que el equipo de desarrollo de SQL Server pueda identificar en el código el lugar exacto en que se generaron los errores del sistema, dado que muchos errores se generan en varios lugares.
Usted, como usuario final (es decir, desarrollador de aplicaciones que utilizan SQL Server) puede utilizar de manera similar el estado pasado para
RAISERROR
que el soporte de su producto pueda identificar el lugar donde un procedimiento genera un error, por ejemplo:Vea cómo los dos estados le permiten distinguir más tarde qué caso de error se alcanzó. Antes de decir "pero puedo ver el mensaje de error", le digo una palabra: internacionalización.
fuente
No, no le ayuda a averiguar dónde se produjo el error. Aquí hay un ejemplo rápido. Si intenta dividir por 0, recibirá un mensaje de error con un montón de detalles:
Resultado:
¿Ves el llamado
State
, con un valor de 1?ERROR_STATE()
devuelve este valor Entonces, si usasTRY/CATCH
:Resultado:
Eso es todo. No es útil en la mayoría de los escenarios. Sugiero leer más sobre el manejo de errores en general antes de profundizar demasiado en funciones específicas que parecen útiles.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
fuente
Respuesta corta: no puede. Un ERROR_STATE es esencialmente una subdivisión de un ERROR_NUMBER. No puede decirle qué línea de código causó el error (excepto en la medida en que ERROR_NUMBER y ERROR_STATE juntos le digan la causa del error, y luego se hace obvio cuál es la causa).
fuente