Hola a todos, pues aquí estoy con una entrega más en esta ocasión les voy a hablar acerca del manejo de excepciones en transacciones de SQL Server 2005.
Una mejora importante que tenemos en SQL Server 2005 es el manejo de errores que ahora es posible en T-SQL con los bloques TRY/CATCH sin olvidar la sintaxis que utilizamos para las transacciones.
La sintaxis es la siguiente:
BEGIN TRY
BEGIN TRANSACTION
Bloque de código SQL a proteger
COMMIT TRANSACTION
END TRY
BEGIN CATCH
Código para mostrar el mensaje de la excepción
ROLLBACK TRANSACTION
END CATCH
Si ocurre un error dentro de la transacción en un bloque TRY inmediatamente se dirige al bloque CATCH. Para poder regresar la información del error tenemos nuevas funciones en SQL Server, veamos cuales son:
- ERROR_NUMBER(): Devuelve el número de error.
- ERROR_MESSAGE(): Devuelve el texto completo del mensaje de error. El texto incluye los valores suministrados para los parámetros sustituibles, como longitudes, nombres de objeto u horas.
- ERROR SEVERITY(): Devuelve la gravedad del error.
- ERROR_STATE(): Devuelve el número de estado de error.
- ERROR_LINE(): Devuelve el número de línea donde se produjo el error.
- ERROR_PROCEDURE(): Devuelve el nombre del procedimiento donde se produjo el error.
Para ello vamos a crear un ejemplo bastante sencillo en donde vamos a provocar una excepción en una división entre cero para observar el funcionamiento de estas funciones.
BEGIN TRY
SELECT 5/0
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS Numero_de_Error,
ERROR_SEVERITY() AS Gravedad_del_Error,
ERROR_STATE() AS Estado_del_Error,
ERROR_PROCEDURE() AS Procedimiento_del_Error,
ERROR_LINE() AS Linea_de_Error,
ERROR_MESSAGE() AS Mensaje_de_Error;
END CATCH
El resultado de este ejemplo es el siguiente:
| Numero_de_Error | Gravedad_del_Error | Estado_del_Error | Procedimiento_del_Error | Linea_del_Error | Mensaje_de_Error |
| 8134 | 16 | 1 | NULL | 2 | Divide by zero error encountered |
Una cosa que deben de tomar en cuenta es que los bloques TRY/CATCH no atraparan los errores de compilación o sintaxis, ya que los errores manejados sólo se invocaran en tiempo de ejecución.
Bueno espero que esto les pueda ayudar a sus proyectos y nos vemos la siguiente entrega.
Feliz Codificación!
S@ludos!
Víctor Alameda
MCSD.NET