Array

Una guía paso a paso para usar TRY / CATCH para manejar errores del servidor SQL

A toy hazard sign surrounded by other various road warning signs

La instrucción TRY / CATCH en Transact-SQL detecta y maneja las condiciones de error en las aplicaciones de la 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.

Introducción de TRY / CATCH

TRY./CATCH funciona especificando dos declaraciones Transact-SQL: una que desea & amp; quot; try & amp; quot; y otra para usar en & amp; quot; catch & amp; quot; 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 se mueve. Sin embargo, si la instrucción TRY genera un error, SQL Server ejecuta la instrucción CATCH para manejar el error con gracia.

Video destacado

La sintaxis básica toma esta forma:

& lt; pre & gt; BEGIN TRY & lt; br & gt ;
sql_statement & lt; br & gt ;
FIN TRY & lt; br & gt ;
COMIENZA LA CAPTURA & lt; br & gt ;
[ Statement_block] & lt; br & gt ;
END CATCH & lt; br & gt ;
[; ] & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; & lt; / pre & gt ;

Ejemplo de PRUEBA / CAPTURA

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 clave principal.

Puede intentar usar la declaración a continuación para insertar un nuevo empleado en su base de datos:

& lt; pre & gt; INSERTAR EN empleados (id, nombre_nombre, apellido, extensión) VALORES (12497, & amp; apos; Mike & amp; apos ;, & amp; appos; Chapple & amp; apos ;, 4201) & lt; / pre & gt ;

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 primaria y daría como resultado el siguiente error:

& lt; pre & gt; Msg 2627, Nivel 14, Estado 1, Línea 1 & lt; br & gt ;
Violación de la restricción PRIMARY KEY & amp; apos; PK_employee_id & amp; apos ;. No se puede insertar la tecla duplicada en object & amp; apos; dbo.employees & amp; apos ;.& lt; br & gt ;
La declaración ha sido terminada.& lt; / br & gt; & lt; / br & gt; & lt; / pre & gt ;
& lt; pre & gt; Msg 2627, Nivel 14, Estado 1, Línea 1 & lt; br & gt ;
Violación de la restricción PRIMARY KEY & amp; apos; PK_employee_id & amp; apos ;. No se puede insertar la tecla duplicada en object & amp; apos; dbo.employees & amp; apos;. La declaración ha finalizado.& lt; / br & gt; & lt; / pre & gt ;

La alternativa es envolver la declaración en una declaración TRY & amp; # x2026; CATCH, como se muestra aquí:

& lt; pre & gt; BEGIN TRY & lt; br & gt ;
INSERTAR EN empleados (id, nombre_nombre, apellido_extensión) & lt; br & gt ;
VALORES (12497, & amp; apos; Mike & amp; apos;, & amp; appos; Chapple & amp; apos ;, 4201) & lt; br & gt ;
FIN TRY & lt; br & gt ;
COMIENZA LA CAPTURA & lt; br & gt ;
IMPRIMIR & amp; apos; ERROR: & amp; apos; + ERROR_MESSAGE (); & lt; br & gt ;
EXEC msdb.dbo.sp_send_dbmail & lt; br & gt ;
@profile_name = & amp; apos; Employee Mail & amp; apos;, & lt; br & gt ;
@recipients = & amp; apos; hr@foo.com & amp; apos;, & lt; br & gt ;
@body = & amp; apos; Se produjo un error al crear un nuevo registro de empleados.& amp; apos;, & lt; br & gt ;
@subject = & amp; apos; Error de base de datos de empleados & amp; apos; ; & lt; br & gt ;
END CATCH & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; / br & gt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; & gt; & gt;

En este ejemplo, los errores que ocurren se informan 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:

& lt; pre & gt; BEGIN TRY & lt; br & gt ;
& lt; br & gt ;
INSERTAR EN empleados (id, nombre_nombre, apellido_extensión) & lt; br & gt ;
VALORES (12497, & amp; apos; Mike & amp; apos;, & amp; appos; Chapple & amp; apos ;, 4201) END TRYBEGIN CATCHPRINT & amp; appos; ERROR: & amp; apos; + ERROR_MESSAGE (); EXEC msdb.d.& amp; apos;, @ subject = & amp; apos; Error de base de datos de empleados & amp; apos; ; END CATCH & lt; / br & gt; & lt; / br & gt; & lt; / br & gt; & lt; / pre & gt ;

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 la base de datos de SQL Server.

Más información

Para obtener más información sobre el lenguaje de consulta estructurado, consulte nuestro artículo Fundamentos de SQL.

& amp; # x203A; Informática

Dejar respuesta

Please enter your comment!
Please enter your name here

FOLLOW US

Related Stories