TRANsacción en un Stored proc

01/06/2005 - 18:07 por Hernán Castelo | Informe spam
hola,
luego del INSERT estoy haciendo esto :

if @@error<> 0
begin
rollback transaction
return -1
end

pero por lo que veo, si se produce un error
la transacción y el stored procedure se abortan

es decir, vale la pena la pregunta mencionada ??
o, me alcanza con hacer :

BEGIN TRAN
INSERT INTO ...
COMMIT TRAN

????

gracias

atte,
Hernán Castelo
SGA - UTN - FRBA
 

Leer las respuestas

#1 Alejandro Mesa
01/06/2005 - 18:44 | Informe spam
Hernán,

No siempre el error hace que el batch o el sp se aborte. Para estar seguro
entonces debes llamar este sp desde otro sp, donde chequearas si hubo un
error o no y si se quedo una transaccion abierta o no. Tambien puedes usar
SET XACT_ABORT ON para que sql server aborte el batch y haga un rollback de
la transaccion.

Ejemplo:

use northwind
go

create procedure dbo.usp_p1
as
set nocount on

begin transaction

insert into [order details] (orderid) values(-1)

if @@error != 0
begin
rollback transaction
raiserror('error insertando en tabla [order details].', 16, 1)
return -1
end
else
begin
commit transaction
return @@error
end
go

create procedure dbo.usp_p2
as
set nocount on

declare @rv int
declare @tc int
declare @error int

set @tc = @@trancount

exec @rv = dbo.usp_p1

set @error = coalesce(nullif(@rv, 0), @@error)

print @tc
print @@trancount

if @error != 0
begin
if @tc > @@trancount
begin
rollback transaction
raiserror('hubo un error en la ejecucion de usp_p1 y la transaccion quedo
abierta.', 16, 1)
end
end

return @error
go

declare @rv int
declare @error int

exec @rv = dbo.usp_p2

set @error = coalesce(nullif(@rv, 0), @@error)

print @error
go

drop procedure dbo.usp_p2, dbo.usp_p1
go


AMB

"Hernán Castelo" wrote:

hola,
luego del INSERT estoy haciendo esto :

if @@error<> 0
begin
rollback transaction
return -1
end

pero por lo que veo, si se produce un error
la transacción y el stored procedure se abortan

es decir, vale la pena la pregunta mencionada ??
o, me alcanza con hacer :

BEGIN TRAN
INSERT INTO ...
COMMIT TRAN

????

gracias

atte,
Hernán Castelo
SGA - UTN - FRBA



Preguntas similares