Como usar...COMMIT rollback

08/08/2007 - 23:45 por Martín | Informe spam
de lo que leí en MSDN y otras páginas vi que usando commit y rollback,
puedo "guardar" transacciones por si me arrepiento le hago rollback

el tema es que ejecuto:


BEGIN TRANSACTION Prueba;
GO
DELETE FROM Tabla
WHERE Campo1 = '1'
commit TRANSACTION Prueba;
GO

y me hace bien la eliminación, pero si me arrepiento y ejecuto como
muchas páginas dicen:

BEGIN TRANSACTION prueba;
rollback transaction prueba;


me da el siguiente error:

Cannot roll back prueba. No transaction or savepoint of that name was
found.


y no me deja deshacer el primer delete, alguien me puede dar una mano?

Gracias!!
Martín

Preguntas similare

Leer las respuestas

#1 Isaias
09/08/2007 - 00:00 | Informe spam
Martin

¿Ya leiste algo de BEGINT TRAN, COMMIT TRAN Y ROLLBACK TRAN ene la ayuda en
linea?

Es cierto que el ROLLBACK TRAN, deshace la transaccion, pero de esta forma.

BEGIN TRAN mytran
DELETE Cliente WHERE IDCliente = 5
IF @@ROWCOUNT = 10
BEGIN
ROLLBACK TRAN mytran
RETURN(0)
END
COMMIT TRAN mytran
Saludos
IIslas


"Martín" wrote:

de lo que leí en MSDN y otras páginas vi que usando commit y rollback,
puedo "guardar" transacciones por si me arrepiento le hago rollback

el tema es que ejecuto:


BEGIN TRANSACTION Prueba;
GO
DELETE FROM Tabla
WHERE Campo1 = '1'
commit TRANSACTION Prueba;
GO

y me hace bien la eliminación, pero si me arrepiento y ejecuto como
muchas páginas dicen:

BEGIN TRANSACTION prueba;
rollback transaction prueba;


me da el siguiente error:

Cannot roll back prueba. No transaction or savepoint of that name was
found.


y no me deja deshacer el primer delete, alguien me puede dar una mano?

Gracias!!
Martín


Respuesta Responder a este mensaje
#2 Martín
09/08/2007 - 00:18 | Informe spam
por las dudas uso sql server 2000, ejecuté eso que me pasaste aplicado
a mis tablas y datos, y me da un error,

de todas maneras no entiendo la idea que intentás explicarme...

Te agradezco por 2

Martin
Respuesta Responder a este mensaje
#3 Juan Carlos Mendoza
09/08/2007 - 01:40 | Informe spam
Hola Martin

Lo que el amigo IIslas intenta graficarte es que tu error es de
sintaxis u orden de logica en los eventos, y por ultimo comentario
como que va algo mas. Los commit y Rollback se aplican sobre las
sentencias ejecutadas desde la ultima sentencia Commitada. El SQL por
default hace commit sobre cada sentencia ejecutada, a veces queremos
deshacer alguna accion por alguna razon, ahi es donde formamos una
estructura BEGIN TRAN.COMMIT/ROLLBACK.


El Commit Tran y Rollback Tran, sirve para confirmar acciones o
deshacerlas. Ampliando tu ejemplo

SELECT * FROM prueba where Campo1 = '1'
GO

BEGIN TRANSACTION Prueba;
GO

DELETE FROM Tabla WHERE Campo1 = '1'

SELECT * FROM prueba where Campo1 = '1'
GO

Aca viene lo interesante: Si ejecutas la primera opcion, luego vuelve
a ejecutar todos los previos a esta sentencia antes de ejecutar la
segunda opcion para que te des cuenta de lo que ocurre.

rollback TRANSACTION Prueba;
GO
SELECT * FROM prueba where Campo1 = '1'
GO

commit TRANSACTION Prueba;
GO
SELECT * FROM prueba where Campo1 = '1'
GO



que paso? con el Commit Tran confirmaste, de que el registro se
elimine sin posibilidad de deshacer por lo que si luego ejecutas un
Rollback Tran tu registro seguira eliminado pues lo confirmaste con el
COmmit Tran. Ojo que si haces un Begin TRAN y no haces un COMMIT o
ROLLBACK todas las acciones que ejecutes se realizaran y permaneceran
APARENTEMENTE asi, hasta que confirmes o deshagas todo lo actuado.

Saludos, y espero no haberte confundido mas.

Juan Carlos Mendoza
Respuesta Responder a este mensaje
#4 Martín
09/08/2007 - 16:47 | Informe spam
Sólo leyendolo me quedó clarisimo, y lo probé en la query y más claro
me quedó...
Así que te agradezco la respuesta ya que me ha solucionado un problema

Martín
Respuesta Responder a este mensaje
#5 Fernando Fauche G.
09/08/2007 - 21:59 | Informe spam
Martin.

Primero, que es absurdo realizar una transaccion donde solo tienes un
"delete" y vas a eliminar un registro (o mas) con o sin transaccion, la
transaccion en este caso no te aporta absolutamente nada si no esta asociada
a otros procesos.

Segundo, para realizar una transaccion debes de seguir un patron de
codificacion

Tercero, el "arrepentirse" solo es valido si uno de tus procesos falla y en
ese momento ejecutar un rollback, pero una vez salido del procedimiento no
hay lugas para "arrepentimientos".

Te copio un ejemplo de transaccion, se puede optimizar mucho mas, ya queda a
tu imaginacion:


CREATE PROCEDURE usp_Persona_I (
@ApePaterno varchar(30),
@ApeMaterno varchar(30),
@Direccion VARCHAR(80),
@Vivo bit,
@AdminId INT OUTPUT
)
AS

DECLARE @Identificador INT
DECLARE @Error1 INT
DECLARE @Error2 INT
SET @Error1 = 0
SET @Error2 = 0

BEGIN TRANSACTION

INSERT INTO Administ.Administrado (AdminID, ApePaterno, ApeMaterno)
VALUES ( @AdminId, @ApePaterno, @ApeMaterno)

SET @Identificador = @@IDENTITY

SELECT @Error1 = @@ERROR

INSERT INTO Administ.Persona (AdminID, ApePaterno, ApeMaterno, Vivo)
VALUES (@AdminId, @ApePaterno, @ApeMaterno, @Vivo)

SELECT @Error2 = @@ERROR

IF @Error1 = 0 AND @Error2 = 0
BEGIN
COMMIT TRANSACTION
RETURN(0)
END

ELSE
BEGIN
ROLLBACK TRANSACTION
RETURN(1)
END
GO




Fernando Fauche G.




"Martín" escribió en el mensaje
news:
de lo que leí en MSDN y otras páginas vi que usando commit y rollback,
puedo "guardar" transacciones por si me arrepiento le hago rollback

el tema es que ejecuto:


BEGIN TRANSACTION Prueba;
GO
DELETE FROM Tabla
WHERE Campo1 = '1'
commit TRANSACTION Prueba;
GO

y me hace bien la eliminación, pero si me arrepiento y ejecuto como
muchas páginas dicen:

BEGIN TRANSACTION prueba;
rollback transaction prueba;


me da el siguiente error:

Cannot roll back prueba. No transaction or savepoint of that name was
found.


y no me deja deshacer el primer delete, alguien me puede dar una mano?

Gracias!!
Martín
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida