Rollback transacciones

13/09/2004 - 22:21 por fco | Informe spam
en el siguiente proc. almacenado:

begin tran

update tabla1 set campo1= 1
update tabla2 set campo1= 1

IF @@ERROR <> 0
ROLLBACK
ELSE
commit

se supone que si una instruccion falla @error es distinto
de 0, entonces deshace la transaccion con rollback, pero
en lugar de eso se ejecuta la instruccion que no falla y
ademas no confirma la transaccion y me arroja el siguiente
error:

"El recuento de transacciones después de EXECUTE indica
que falta una instrucción COMMIT o ROLLBACK TRANSACTION.
Recuento anterior = 1, recuento actual = 2."

¿alguien sabe como confirmar o deshacer las transacciones,
porque este ejemplo lo saque de la ayuda y no ma habia
dado cuenta que no funciona?

instrucciones obviamente la deshace, pero si esta despues
del if @error ... no lo reconoce..
 

Leer las respuestas

#1 Maxi
13/09/2004 - 22:31 | Informe spam
hola, el tema es que debes poner el control siempre luego de cada
instruccion ya que el valor puede cambiar, o sea:

begin tran

update tabla1 set campo1= 1
IF @@ERROR <> 0
begin
ROLLBACK
return
end

update tabla2 set campo1= 1

IF @@ERROR <> 0
ROLLBACK
return
ELSE
commit



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"fco" escribió en el mensaje
news:185a01c499cf$48fa4de0$
en el siguiente proc. almacenado:

begin tran

update tabla1 set campo1= 1
update tabla2 set campo1= 1

IF @@ERROR <> 0
ROLLBACK
ELSE
commit

se supone que si una instruccion falla @error es distinto
de 0, entonces deshace la transaccion con rollback, pero
en lugar de eso se ejecuta la instruccion que no falla y
ademas no confirma la transaccion y me arroja el siguiente
error:

"El recuento de transacciones después de EXECUTE indica
que falta una instrucción COMMIT o ROLLBACK TRANSACTION.
Recuento anterior = 1, recuento actual = 2."

¿alguien sabe como confirmar o deshacer las transacciones,
porque este ejemplo lo saque de la ayuda y no ma habia
dado cuenta que no funciona?

instrucciones obviamente la deshace, pero si esta despues
del if @error ... no lo reconoce..






Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.748 / Virus Database: 500 - Release Date: 01/09/2004

Preguntas similares