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

Preguntas similare

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



Respuesta Responder a este mensaje
#2 Maximiliano Fabbro
01/06/2005 - 18:45 | Informe spam
Hernán
Si es un solo insert no es necesario definir la transacción
explicitamente.
La segunda opción no tiene sentido ya que, al no validar los errores,
estas suponiendo que todas las transacción se ejecuto correctamente.

Saludos.
Maxi.


"Hernán Castelo" escribió en el mensaje
news:%
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


Respuesta Responder a este mensaje
#3 Alejandro Mesa
01/06/2005 - 21:20 | Informe spam
Hernán,

cómo hago para que quede establecido
"para siempre" que SET XACT_ABORT sea ON



Esta opcion es puesta en tiempo de ejecucion, aso que debes usarla en los
procedimientos almacenados donde desees este comportamiento.


AMB

"Hernán Castelo" wrote:

gracias,
claro que yo tengo varias instrucciones encadenadas

begin tran
INSERT ...
error ? --> rollback tran + exit
UPDATE ...
error ? --> rollback tran + exit
INSERT ...
error ? --> rollback tran + exit
commit tran

cómo hago para que quede establecido
"para siempre" que SET XACT_ABORT sea ON

ya que yo no utilizo transacciones anidadas
y los libros de SQL dicen :

Es necesario que se configure XACT_ABORT a ON para las instrucciones de modificación de datos en una transacción implícita o explícita contra la mayoría de proveedores OLE DB, incluido SQL Server. El único caso donde no se requiere esta opción es si el proveedor acepta transacciones anidadas


gracias nuevamente


atte,
Hernán Castelo
SGA - UTN - FRBA

"Hernán Castelo" escribió en el mensaje news:%
> 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
>
>
Respuesta Responder a este mensaje
#4 Hernán Castelo
06/06/2005 - 17:38 | Informe spam
gracias
a cada rato ?!
no hay una manera para que quede
establecida por default ?

atte,
Hernán Castelo
SGA - UTN - FRBA

"Alejandro Mesa" escribió en el
mensaje news:
Hernán,

> cómo hago para que quede establecido
> "para siempre" que SET XACT_ABORT sea ON

Esta opcion es puesta en tiempo de ejecucion, aso que debes usarla en los
procedimientos almacenados donde desees este comportamiento.


AMB

"Hernán Castelo" wrote:

> gracias,
> claro que yo tengo varias instrucciones encadenadas
>
> begin tran
> INSERT ...
> error ? --> rollback tran + exit
> UPDATE ...
> error ? --> rollback tran + exit
> INSERT ...
> error ? --> rollback tran + exit
> commit tran
>
> cómo hago para que quede establecido
> "para siempre" que SET XACT_ABORT sea ON
>
> ya que yo no utilizo transacciones anidadas
> y los libros de SQL dicen :
>
> Es necesario que se configure XACT_ABORT a ON para las instrucciones de


modificación de datos en una transacción implícita o explícita contra la
mayoría de proveedores OLE DB, incluido SQL Server. El único caso donde no
se requiere esta opción es si el proveedor acepta transacciones anidadas
>
>
> gracias nuevamente
>
>
> atte,
> Hernán Castelo
> SGA - UTN - FRBA
>
> "Hernán Castelo" escribió en el mensaje


news:%
> > 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
> >
> >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida