Una guía paso a paso para usar TRY … CATCH para manejar errores de SQL Server

Identificar errores sin interrumpir la ejecución. La instrucción TRY ... CATCH en Transact-SQL detecta y maneja condiciones de error en aplicaciones de bases de datos.

Identificar errores sin interrumpir la ejecución.

La instrucción TRY … CATCH en Transact-SQL detecta y maneja condiciones de error en aplicaciones de bases de datos. Esta declaración es la piedra angular del manejo de errores de SQL Server y es una parte importante del desarrollo de aplicaciones de bases de datos robustas. PRUEBE … CATCH se aplica a SQL Server a partir de 2008, Azure SQL Database, Azure SQL Data Warehouse y Parallel Data Warehouse.

Presentamos TRY … CATCH

PRUEBE … CATCH funciona permitiéndole especificar dos instrucciones Transact-SQL: una que desea «probar» y otra para «atrapar» cualquier error que pueda surgir. Cuando SQL Server encuentra una instrucción TRY … CATCH, ejecuta inmediatamente la instrucción incluida en la cláusula TRY. Si la instrucción TRY se ejecuta con éxito, SQL Server continúa. Sin embargo, si la instrucción TRY genera un error, SQL Server ejecuta la instrucción CATCH para manejar el error con gracia.

La sintaxis básica toma esta forma:

 COMIENZA LA PRUEBA 
bloque de instrucciones
FIN INTENTAR
COMENZAR CAPTURA
[sql_statement ]
FIN DE CAPTURA
[; ]

PRUEBA … CAPTURA Ejemplo

Es fácil entender el uso de esta declaración a través de un ejemplo. Imagine que es el administrador de una base de datos de recursos humanos que contiene una tabla llamada «Empleados», que contiene información sobre cada uno de los empleados de su organización. Esa tabla usa un número entero de identificación de empleado como clave principal. Puede intentar utilizar la siguiente declaración para insertar un nuevo empleado en su base de datos:

 INSERTAR EN los empleados (id, nombre, apellido, extensión) 
VALUES (12497, 'Mike', 'Chapple', 4201)

En circunstancias normales, esta declaración agregaría una fila a la tabla Empleados. Sin embargo, si ya existe un empleado con ID 12497 en la base de datos, la inserción de la fila violaría la restricción de la clave principal y daría como resultado el siguiente error:

 Mensaje 2627, Nivel 14, Estado 1, Línea 1 
Violación de la restricción PRIMARY KEY 'PK_employee_id'. No se puede insertar una clave duplicada en el objeto 'dbo.employees'.
La declaración ha finalizado.

Si bien este error le proporciona la información que necesita para solucionar el problema, existen dos problemas. Primero, el mensaje es críptico. Incluye códigos de error, números de línea y otra información que es incomprensible para el usuario promedio. En segundo lugar, y lo que es más importante, hace que la declaración se cancele y podría provocar un bloqueo de la aplicación.
La alternativa es envolver la declaración en una declaración TRY … CATCH, como se muestra aquí:

 COMIENCE INTENTAR 
INSERTE EN los empleados (id, nombre, apellido, extensión)
VALORES (12497, 'Mike', 'Chapple', 4201)
INTENTAR FIN
COMIENZA CATCH
PRINT 'ERROR:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Employee Mail',
@recipients ='hr@foo.com ',
@body =' Se produjo un error al crear un nuevo registro de empleado. ',
@subject =' Error de duplicación de ID de empleado ';
FIN DE CAPTURA

En este ejemplo, cualquier error que ocurra se informa tanto al usuario que ejecuta el comando como a la dirección de correo electrónico hr@foo.com. El error que se muestra al usuario es:

 Error: Infracción de la restricción PRIMARY KEY 'PK_employee_id'. 
No se puede insertar una clave duplicada en el objeto 'dbo.employees'.
Correo en cola.

La ejecución de la aplicación continúa normalmente, permitiendo que el programador maneje el error. El uso de la instrucción TRY … CATCH es una forma elegante de detectar y manejar proactivamente los errores que ocurren en las aplicaciones de bases de datos de SQL Server.

Aprendiendo más

Si desea obtener más información sobre el lenguaje de consulta estructurado, consulte Introducción a SQL.

Rate article
labsfabs.com
Add a comment