Skip to main content

Usando TRY ... CATCH para manejar los errores del servidor SQL

Internet Technologies - Computer Science for Business Leaders 2016 (Julio 2024)

Internet Technologies - Computer Science for Business Leaders 2016 (Julio 2024)
Anonim

La instrucción TRY… CATCH en Transact-SQL detecta y maneja las condiciones de error en las aplicaciones de base 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. 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 permitiéndole especificar dos instrucciones Transact-SQL: una que desea "intentar" y otra para usar para "detectar" cualquier error que pueda surgir. Cuando SQL Server encuentra una sentencia TRY … CATCH, ejecuta inmediatamente la sentencia 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 sin problemas.

La sintaxis básica toma esta forma:

Comience bloque de estado de cuenta Prueba finalCOMIENZO A PARTIRsql_statementCaptura final ;

TRY … Ejemplo de captura

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 utiliza un número de ID de empleado entero como clave principal. Puede intentar usar 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 la clave principal y generaría el siguiente error:

Mensaje 2627, Nivel 14, Estado 1, Línea 1Violació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 cancele y podría provocar un bloqueo de la aplicación.La alternativa es envolver la declaración en una instrucción TRY … CATCH, como se muestra aquí:

ComienceINSERT INTO empleados (id, first_name, last_name, extension)VALORES (12497, 'Mike', 'Chapple', 4201)Prueba finalCOMIENZO A PARTIRIMPRIMIR 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@nombre_de_perfil = 'Correo del empleado',@recipients = '[email protected]',@body = 'Se produjo un error al crear un nuevo registro de empleado.',@subject = 'Error de duplicación de ID de empleado';Captura final

En este ejemplo, cualquier error que ocurra se reporta tanto al usuario que ejecuta el comando como a la dirección de correo electrónico [email protected]. El error que se 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, permitiendo que el programador maneje el error. El uso de la instrucción TRY … CATCH es una forma elegante de detectar y manejar de forma proactiva los errores que ocurren en las aplicaciones de base 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.