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..

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Gustavo Larriera [MVP]
13/09/2004 - 22:42 | Informe spam
@@error devuelve el valor de la sentencia UPDATE previa. No veo dónde
capturas el posible error de la primera sentencia UPDATE ?

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"fco" wrote in message
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..
Respuesta Responder a este mensaje
#3 Chente
13/09/2004 - 23:06 | Informe spam
begin tran

declare @error int
set @error = 0

update tabla1 set campo1= 1
set @error = @error + @@error

update tabla2 set campo1= 1
set @error = @error + @@error

IF @ERROR <> 0
ROLLBACK
ELSE
commit



Saludos.

Vicente López R.
Respuesta Responder a este mensaje
#4 Giovany
14/09/2004 - 00:30 | Informe spam
Pero @@ERROR captura cualquier tipo de error?, o sea si
la tabla que pusiste en la instruccion no existe, claro
por omision, @@ERROR se debe dar cuenta ?, y asi aplicar
el ROLLBACK TRANSA.., ya que yo tengo un post mas atras
parecido a este tema, y tengo esa gran duda, por el
problema que tuve que nunca dio el ROLLBACK.

Saludos



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


.

Respuesta Responder a este mensaje
#5 MAXI
14/09/2004 - 00:37 | Informe spam
Hola @@error captura el ultimo error ocurrido y se resetea, o sea: En tu
ejemplo si el primer paso genera error y el segundo no lo hace, como has
puesto el @@error solo luego del segundo paso no hara el Rollback en tu
codigo.

En el codigo que yo te envie si lo hara :-), y @@error marca cualquier error




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Giovany" escribió en el mensaje
news:181c01c499e1$44856260$
Pero @@ERROR captura cualquier tipo de error?, o sea si
la tabla que pusiste en la instruccion no existe, claro
por omision, @@ERROR se debe dar cuenta ?, y asi aplicar
el ROLLBACK TRANSA.., ya que yo tengo un post mas atras
parecido a este tema, y tengo esa gran duda, por el
problema que tuve que nunca dio el ROLLBACK.

Saludos



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


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida