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

#6 Juan Carlos Mendoza
11/08/2007 - 20:40 | Informe spam
La respuesta brindada tuvo mas caracter de orientacion y de probar " a
ver que pasa" mas que a aplicar en la practica con miras a produccion.
Una cosas es saber mover las fichas de ajedrez y otra muy distinta
saber jugar ajedrez, el amigo, le entendi solo queria saber, lo que yo
diria, "como mover las fichas"

Saludos,

Juan Carlos Mendoza

On 9 ago, 14:59, "Fernando Fauche G." wrote:
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 mensajenews:
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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida