Hola de nueva cuenta, mucho se
preguntan si es possible el control de errores dentro de SQL SERVER, la
respuesta es sí, através de las instrucciones TRY CATCH y en conjunto con
COMMIT y ROLLBACK son una excelente manera para detectar errores y evitar algún
comportamiento no deseado en nuestro código, les explicaré un poco más:
TRY CATCH
Se utiliza para el manejo de
errores detectados dentro de un bloque.
COMMIT
Es la finalización de nuestro
bloque de código y todas las instrucciones dentro de él se llevarán a cabo siempre
y cuando no se haya generado error alguno.
ROLLBACK
Sirve para deshacer todos los
movimientos realizados dentro del bloque de la transacción del mismo nombre.
Ahora les mostraré un ejemplo,
primero creamos una tabla:
IF OBJECT_ID( 'tblPruebas' ) IS NOT NULL DROP TABLE tblPruebas CREATE TABLE tblPruebas ( cve INT )
Ahora ejecutamos una serie de
instrucciones con los bloques de código TRY, CATCH y COMMIT.
INSERT INTO tblPruebas VALUES( 1 ) BEGIN TRY INSERT INTO tblPruebas VALUES( 2 ) , ( 3 ) --b BEGIN TRAN nombreTransaccion INSERT INTO tblPruebas VALUES( 4 ) --c INSERT INTO tblPruebas VALUES( 5 ) , ( 'a' ) --d COMMIT TRAN nombreTransaccion END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS errNumber , ERROR_SEVERITY() AS errSeverity , ERROR_STATE() AS errState , ERROR_PROCEDURE() AS errProcedure , ERROR_LINE() AS errLine , ERROR_MESSAGE() AS errMessage ROLLBACK TRAN nombreTransaccion SELECT * FROM tblPruebas END CATCH
Como podemos observar, el INSERT (a) está fuera de ambos bloques, por lo
tanto se ejecuta con normalidad, el (b)
se encuentra dentro del bloque TRY pero fuera del bloque BEGIN TRAN… COMMIT
TRAN, (c) y (d) se encuentran
dentro de ambos bloques, solo que esté ultimo genera un error, entonces
capturamos el error y se obtiene con las funciones de ERROR que solamente se
pueden utilizar dentro del bloque CATCH y aplicamos un ROLLBACK TRAN, por lo
tanto todo el bloque de instrucciones dentro de la transacción del mismo
nombre, se revierten, es por ellos que el valor 4 no se inserta a la tabla.
Espero que les sirva de ayuda,
cualquier duda o comentario, pueden escribirme.
SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE
0 comentarios:
Publicar un comentario