post icon

Como utilizar los SavePoints en las transacciones de SQL Server

Las transacciones son un conjunto de operaciones que se deben completar el conjunto completo de instrucciones o ninguna normalmente. Pero existen los casos en donde tenemos varios pasos y si se ejecuta hasta cierto punto queremos hacer COMMIT de las operaciones, y simplemente deshacer el resto que arroja error.

Las circunstancias de uso no son muy comunes pero tampoco demasiado escasas. Para lograr esto podemos crear savepoints en nuestra transacción, es cuestión de agregar un poco más de control y líneas de código a lo que estamos acostumbrados.

En el siguiente script SQL verán un ejemplo simple y tonto donde hago la inserción en 2 tablas, guardo un punto de la transacción luego de la primer inserción, luego se lanza una excepción intencional para probar (esa parte del código espero que no lo copien a producción). La variable TranCounter sirve saber si la excepción ocurrió antes o después del SAVEPOINT, así sabremos si hacer un ROLLBACK de toda la transacción o solamente de la última sección.

Vale recordar que si hacemos un ROLLBACK de un SAVEPOINT, se debe realizar finalmente un COMMITpara confirmar la primer parte de la transacción. Incluso pueden crear varios puntos de salvado y realizar distintas acciones según el caso.

begin tran;
DECLARE @TranCounter INT;
SET @TranCounter = 0;
begin try

	insert into bd..tabla1
			(descripcion)
	values
			('yyyyyyyyyyyy');

	save tran trxDevtroce;

	set @TranCounter = 1;

	raiserror('error provocado', 16, 1);

	insert into bd..tabla2
			(descripcion)
	values
			('xxxxxxxxx');

	commit tran;
end try
begin catch
	if @TranCounter = 0
	begin
		rollback tran;
	end
	else
	begin
		rollback tran trxDevtroce;
		commit tran;
	end
end catch

Comentarios desde Facebook:

Sin Comentarios aun, puedes tú ser el primero en comentar!

Deja tu Comentario

Responder