Evaluar una instruccion INSERT, UPDATE o DELETE

22/10/2009 - 22:21 por Miguel Angel | Informe spam
Hola,

Estoy creando procedimientos que efectuan INSERT, UPDATE o DELETE sobre una
tabla. La idea es que esta actualizacion sea Transaccional por lo que intento
utilizar BEGIN TRAN, sin embargo no he encontrado la manera de saber el
estado que devuelven las instrucciones INSERT, UPDATE o DELTE como para
evaluar si se hace el COMMIT TRAN o el ROLLBACK TRAN. Alguien pordría
ayudarme con este tema por favor.

La idea es manejar algo como esto:
BEGIN TRAN
UPDATE miTabla SET miCampo = 'HOLA'
IF [estado de la instruccion] > 0
COMMIT TRAN
ELSE
ROLLBACK
ENDIF

Espero que se entienda la idea.

Gracias por toda la ayuda que podais darme.
 

Leer las respuestas

#1 Alejandro Mesa
23/10/2009 - 04:43 | Informe spam
Miguel Angel,

1 - Cual version de SQL Server usas?

2 - Si estas ejecutando una unica sentencia entonces no es necesario usar
una transaccion explicita. SQL Server garantiza que si hay un error, las
filas modificadas no seran grabadas. Si en cambio usas un conjunto de
sentencias y quieres tratarlas como una unidad, entonces deberas contrlar
errores. Si usas SQL Server 2000, la opcion es chequear la variable @@error
por cada sentencia DDL. Si usas SQL Server 2005 / 2008, entonces puedes hacer
uso de el bloque BEGIN TRY...END TRY BEGINCATCH ... END CATCH.

declare @error int;

set xact_abort on;

begin transaction

update dbo.T1
set c1 = 2
where c2 = 4;

set @error = @@error;

if @error <> 0 goto ErrorHandler;

insert into dbo.T2 (c1, c2)
values(5, 7);

set @error = @@error;

if @error <> 0 goto ErrorHandler;

commit transaction;

return 0;

ErrorHandler:

if @@trancount > 0
rollback transaction;

return -1;
go



set xact_abort on;

begin try
begin transaction

update dbo.T1
set c1 = 2
where c2 = 4;

insert into dbo.T2 (c1, c2)
values(5, 7);

commit transaction;

return 0;
end try
begin catch
if @@trancount > 0
rollback transaction;

return -1;
end catch
go


Chequea los BOL para mas info sobre el bloque "begin try...end try begin
catch...end catch".


AMB


"Miguel Angel" wrote:

Hola,

Estoy creando procedimientos que efectuan INSERT, UPDATE o DELETE sobre una
tabla. La idea es que esta actualizacion sea Transaccional por lo que intento
utilizar BEGIN TRAN, sin embargo no he encontrado la manera de saber el
estado que devuelven las instrucciones INSERT, UPDATE o DELTE como para
evaluar si se hace el COMMIT TRAN o el ROLLBACK TRAN. Alguien pordría
ayudarme con este tema por favor.

La idea es manejar algo como esto:
BEGIN TRAN
UPDATE miTabla SET miCampo = 'HOLA'
IF [estado de la instruccion] > 0
COMMIT TRAN
ELSE
ROLLBACK
ENDIF

Espero que se entienda la idea.

Gracias por toda la ayuda que podais darme.

Preguntas similares