El try catch recién agregado en SQL Server 2005 puede detectar excepciones fácilmente. Lo echaré un vistazo hoy y resumiré los puntos clave de la siguiente manera
.
{ declaración_sql |
bloque_declaración }
FINALIZAR INTENTO
COMENZAR A CAPTAR
{ declaración_sql |
bloque_declaración }
FINAL DE CAPTURA
, similar al uso del manejo de excepciones en lenguajes comunes, pero debe tenerse en cuenta que SQL SERVER solo detecta excepciones que no son graves. Cuando excepciones como la base de datos no se pueden conectar, etc., no se pueden detectar. COMENZAR A INTENTAR
DECLARAR @X INT
-- Dividir por cero para generar Error
ESTABLECER @X = 1/0
IMPRIMIR 'Comando después de error en bloque TRY'
FINALIZAR INTENTO
COMENZAR A CAPTAR
IMPRIMIR 'Error detectado'
FINAL DE CAPTURA
PRINT 'Comando después de los bloques TRY/CATCH'
Además, try catch se puede anidar en Begin TRY.
eliminar de GrandParent donde Nombre = 'John Smith'
imprimir 'Abuelo eliminado exitosamente'
Finalizar intento
Comenzar la captura
Imprimir 'Error al eliminar el registro de abuelos'
Empezar a intentar
eliminar de Parent donde GrandParentID =
(seleccione una identificación distinta del abuelo donde Nombre = 'John Smith')
Imprimir 'Padre eliminado exitosamente'
Finalizar intento
Comenzar la captura
imprimir 'Error al eliminar el padre'
Empezar a intentar
eliminar del niño donde ParentId =
(seleccione una ID distinta de Parent donde GrandParentID =
(seleccione una identificación distinta del abuelo donde Nombre = 'John Smith'))
imprimir 'Niño eliminado exitosamente'
Finalizar intento
Comenzar la captura
Imprimir 'Error al eliminar al niño'
Finalizar captura
Finalizar captura
Finalizar captura
Además, SQL SERVER 2005 proporciona métodos de clase de error en el mecanismo de excepción para facilitar la depuración. El extracto es el siguiente, que es relativamente simple y no se explicará: Devuelve un número asociado con el error.ERROR_SEVERITY(): Devuelve la gravedad del error.ERROR_STATE(): Devuelve el número de estado de error asociado con el error.ERROR_PROCEDURE(): Devuelve el nombre del procedimiento almacenado o disparador en el que ocurrió el error.ERROR_LINE(): Devuelve el número de línea dentro del rutina fallida que causó el error. ERROR_MESSAGE(): Devuelve el texto completo del mensaje de error. El texto incluye los valores proporcionados para cualquier parámetro sustituible, como longitudes, nombres de objetos o tiempos. usando el método de clase de error COMENZAR INTENTAR
DECLARAR @X INT
-- Dividir por cero para generar Error
ESTABLECER @X = 1/0
IMPRIMIR 'Comando después de error en bloque TRY'
FINALIZAR INTENTO
COMENZAR A CAPTAR
IMPRIMIR 'Error detectado'
SELECT ERROR_NUMBER() ERNúmero,
ERROR_SEVERITY() Error_Severidad,
ERROR_STATE() Estado_error,
ERROR_PROCEDURE() Error_Procedimiento,
ERROR_LINE() Línea_error,
ERROR_MESSAGE() Mensaje_Error
FINAL DE CAPTURA
PRINT 'Comando después de los bloques TRY/CATCH'
Finalmente se detectó un error de salida
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- -------------------- ------- ----------------------------------
8134 16 1 NULL 4 Se encontró un error de división por cero
Fuente: jackyrong BLOG.