La instrucción TRY / CATCH en Transact-SQL detecta y maneja condiciones de error en aplicaciones de base de datos. Esta declaración es la piedra angular de SQL Manejo de errores del servidor y es una parte importante del desarrollo de aplicaciones de bases de datos sólidas.
TRY / CATCH se aplica a SQL Server a partir de 2008, Azure SQL Database, Azure SQL Data Warehouse y Parallel Data Warehouse.
Presentamos TRY / CATCH
TRY./CATCH funciona especificando dos instrucciones Transact-SQL: una que desea "probar" y otra para "detectar" 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 correctamente, 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 correctamente.
La sintaxis básica toma esta forma:
COMIENZA A INTENTAR
{sql_statement | bloque de declaración}
FIN DE PRUEBA
COMENZAR LA CAPTURA
[{sql_statement | bloque_de_ declaraciones}]
FIN DE LA CAPTURA
[; ]
Ejemplo de TRY / CATCH
Considere una base de datos de recursos humanos que contiene una tabla llamada empleados, que contiene información sobre cada uno de los empleados de una empresa. Esa tabla usa un número de identificación de empleado entero como el Clave primaria.
Puede intentar utilizar la siguiente declaración para insertar un nuevo empleado en su base de datos:
INSERT INTO empleados (id, first_name, last_name, extension)
VALORES (12497, 'Mike', 'Chapple', 4201)
En circunstancias normales, esta declaración agregaría una fila a la tabla Empleados. Sin embargo, si un empleado con ID 12497 ya existe en la base de datos, insertar la fila violaría la restricción de clave primaria y resultaría en el siguiente error:
Msj 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 instrucción se ha terminado.
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 anule 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í:
COMIENZA A INTENTAR
INSERT INTO empleados (id, first_name, last_name, extension)
VALORES (12497, 'Mike', 'Chapple', 4201)
FIN DE PRUEBA
COMENZAR LA CAPTURA
IMPRIMIR 'ERROR:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Correo del empleado',
@recipients = '[email protected]',
@body = 'Se produjo un error al crear un nuevo registro de empleado.',
@subject = 'Error en la base de datos del empleado';
FIN DE LA 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 [email protected]. El error que se le muestra al usuario es:
Error: Violació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, lo que permite al programador manejar el error. El uso de la instrucción TRY / CATCH es una forma elegante de detectar y manejar de manera proactiva los errores que ocurren en las aplicaciones de bases de datos de SQL Server.
Aprendiendo más
Para obtener más información sobre el lenguaje de consulta estructurado, consulte nuestro artículo Fundamentos de SQL.