forma correcta de usar TRAN, ROLLBACK y COMMIT

16/07/2004 - 00:19 por Yan Cantuarias | Informe spam
Hola, estoy tratando de aprender el uso de TRAN y quisiera saber si lo estoy
usando correctamente, se supone que si hago un insert a la tabla YAN, y al
hacer un insert a la tabla YAN2 me da error, el ROLLBACK eliminará lo
ingresado en la tabla YAN, no?
lo he echo asi, pero cuando despues que me da error hago un select, se queda
el select en proceso...
alguin me puede guiar por favor... se lo agradeceré mucho


Adjunto el pequeño codigo...

Declare @UltimoID integer
BEGIN TRAN T1

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')

Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
ROLLBACK TRAN T1
else
COMMIT TRAN T1

GO

Preguntas similare

Leer las respuestas

#1 MAXI
16/07/2004 - 00:35 | Informe spam
hmm es extraño porque el rollback debe deshacer la transaccion, lo que veo
que tenes mal es el @@error te falta poner uno en la otra operacion, recorda
que esto traera si la ultima ejecucion ha tenido algun error, por lo cual
ten cuidado, proba esto:

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')

if @@error<>0
ROLLBACK TRAN T1
return
else
COMMIT TRAN T1
return

Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
ROLLBACK TRAN T1
return
else
COMMIT TRAN T1
return


=
Suerte








Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


"Yan Cantuarias" escribió en el mensaje
news:
Hola, estoy tratando de aprender el uso de TRAN y quisiera saber si lo


estoy
usando correctamente, se supone que si hago un insert a la tabla YAN, y


al
hacer un insert a la tabla YAN2 me da error, el ROLLBACK eliminará lo
ingresado en la tabla YAN, no?
lo he echo asi, pero cuando despues que me da error hago un select, se


queda
el select en proceso...
alguin me puede guiar por favor... se lo agradeceré mucho


Adjunto el pequeño codigo...

Declare @UltimoID integer
BEGIN TRAN T1

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')

Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
ROLLBACK TRAN T1
else
COMMIT TRAN T1

GO


Respuesta Responder a este mensaje
#2 klod
16/07/2004 - 05:14 | Informe spam
En una transacción no debes tener dos commit como los que planteastes. En
ese caso nunca se realiza el segundo insert. debe ser:

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')
if @@error<>0
BEGIN
ROLLBACK TRAN T1
return
END

Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
BEGIN
ROLLBACK TRAN T1
return
END
else
BEGIN
COMMIT TRAN T1
return
END



"MAXI" wrote in message
news:
hmm es extraño porque el rollback debe deshacer la transaccion, lo que veo
que tenes mal es el @@error te falta poner uno en la otra operacion,


recorda
que esto traera si la ultima ejecucion ha tenido algun error, por lo cual
ten cuidado, proba esto:

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')

if @@error<>0
ROLLBACK TRAN T1
return
else
COMMIT TRAN T1
return




Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
ROLLBACK TRAN T1
return
else
COMMIT TRAN T1
return


=>
Suerte








Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


"Yan Cantuarias" escribió en el mensaje
news:
> Hola, estoy tratando de aprender el uso de TRAN y quisiera saber si lo
estoy
> usando correctamente, se supone que si hago un insert a la tabla YAN, y
al
> hacer un insert a la tabla YAN2 me da error, el ROLLBACK eliminará lo
> ingresado en la tabla YAN, no?
> lo he echo asi, pero cuando despues que me da error hago un select, se
queda
> el select en proceso...
> alguin me puede guiar por favor... se lo agradeceré mucho
>
>
> Adjunto el pequeño codigo...
>
> Declare @UltimoID integer
> BEGIN TRAN T1
>
> select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
> Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')
>
> Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')
>
> if @@error<>0
> ROLLBACK TRAN T1
> else
> COMMIT TRAN T1
>
> GO
>
>


Respuesta Responder a este mensaje
#3 Yan Cantuarias
16/07/2004 - 17:07 | Informe spam
Gracias amigos por la informacion...
"klod" escribió en el mensaje
news:
En una transacción no debes tener dos commit como los que planteastes. En
ese caso nunca se realiza el segundo insert. debe ser:

select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')
if @@error<>0
BEGIN
ROLLBACK TRAN T1
return
END

Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')

if @@error<>0
BEGIN
ROLLBACK TRAN T1
return
END
else
BEGIN
COMMIT TRAN T1
return
END



"MAXI" wrote in message
news:
> hmm es extraño porque el rollback debe deshacer la transaccion, lo que


veo
> que tenes mal es el @@error te falta poner uno en la otra operacion,
recorda
> que esto traera si la ultima ejecucion ha tenido algun error, por lo


cual
> ten cuidado, proba esto:
>
> select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
> Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')
>
> if @@error<>0
> ROLLBACK TRAN T1
> return
> else
> COMMIT TRAN T1
> return
>



> Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')
>
> if @@error<>0
> ROLLBACK TRAN T1
> return
> else
> COMMIT TRAN T1
> return
>
>
> => >
> Suerte
>
>
>
>
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
>
> Desarrollador .NET 3 Estrellas
>
> Mail: Maxi_accotto[arroba]speedy.com.ar
>
> MSN:
>
>
> "Yan Cantuarias" escribió en el mensaje
> news:
> > Hola, estoy tratando de aprender el uso de TRAN y quisiera saber si lo
> estoy
> > usando correctamente, se supone que si hago un insert a la tabla YAN,


y
> al
> > hacer un insert a la tabla YAN2 me da error, el ROLLBACK eliminará lo
> > ingresado en la tabla YAN, no?
> > lo he echo asi, pero cuando despues que me da error hago un select, se
> queda
> > el select en proceso...
> > alguin me puede guiar por favor... se lo agradeceré mucho
> >
> >
> > Adjunto el pequeño codigo...
> >
> > Declare @UltimoID integer
> > BEGIN TRAN T1
> >
> > select top 1 @UltimoID=Id_YAN from YAN Order by Id_YAN desc
> > Insert YAN (Id_YAN, Des_YAN) Values (@UltimoID + 1,'XXX')
> >
> > Insert YAN2 (Id_YAN, Des_YAN) Values (2,'XXX')
> >
> > if @@error<>0
> > ROLLBACK TRAN T1
> > else
> > COMMIT TRAN T1
> >
> > GO
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida