Desde SQL-Server 2008 es posible utilizar la instrucción Try…Catch. Estas instrucciones nos permiten implementar un mecanismo de control de errores: metemos un bloque de código dentro de la instrucción Try, para intentar ejecutarlo, y dentro de Catch metemos las instrucciones para controlar la respuesta en caso de error.
La sintaxis básica de un Try…Catch en SQL-Server es la siguiente:
BEGIN TRY ---Bloque de código END TRY BEGIN CATCH --Código en caso de error. END CATCH
Cuando realizamos una transacción podemos exprimir al 100% la instrucción Try…Catch. La idea es la siguiente: Comenzamos la transacción, intentamos una acción en un bloque Try. En caso de que falle mostramos el error y ejecutamos un rollback para anular la transacción. En caso de éxito confirmamos la ejecución de la transacción.
Veamos un código de ejemplo:
BEGIN TRANSACTION; --Comienza BEGIN TRY --Aquí empieza el try Insert into Ejemplo(Id,Nombre) values(22,'Manuel'); Delete From Espera Where Nombre = 'Manuel' --Intentaremos esas dos acciones END TRY BEGIN CATCH --El primer paso en el Catch --Será recoger y mostrar --Todos los errores SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage; --Si hay transacción abierta --Hacemos un rollback sobre ella --Para anularla IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; END CATCH; --Fuera del bloque vamos a --comprobar que haya transacción abierta. --Si la hay es que no tuvo que ir por el CATCH --Por tanto confirmamos. IF @@TRANCOUNT > 0 COMMIT TRANSACTION; GO