no funciona rollback

05/12/2007 - 11:50 por reo | Informe spam
tengo un procedimiento que en todo momento se controla si ocurre un error
para hacer un rollback
¿puede ocurrir que por alguna causa se produzca un error y el @@error no lo
coja o bien el rollback
no desaga todo lo ocurrido dentro del begin tran?
y si es asi , ¿como puedo hacer para detectar dicho error?

mi procedimiento es de este estilo

create procedure Volcar()
as
set nocount on
begin transaction

insert into tabla1(ncampo)
select ncampo from tabla2
set @p_error=@@error
if @p_error<>0 then goto TRATAMIENTOERRORES

commit tran
goto FIN
TRATAMIENTOERRORES:
rollback tran
FIN:
set nocount off

muchas gracias

Preguntas similare

Leer las respuestas

#1 Germán Valdez
05/12/2007 - 13:22 | Informe spam
tal vez te convenga

SET XACT_ABORT { ON | OFF }



"reo" escribió en el mensaje
news:
tengo un procedimiento que en todo momento se controla si ocurre un error
para hacer un rollback
¿puede ocurrir que por alguna causa se produzca un error y el @@error no
lo coja o bien el rollback
no desaga todo lo ocurrido dentro del begin tran?
y si es asi , ¿como puedo hacer para detectar dicho error?

mi procedimiento es de este estilo

create procedure Volcar()
as
set nocount on
begin transaction

insert into tabla1(ncampo)
select ncampo from tabla2
set @p_error=@@error
if @p_error<>0 then goto TRATAMIENTOERRORES

commit tran
goto FIN
TRATAMIENTOERRORES:
rollback tran
FIN:
set nocount off

muchas gracias

Respuesta Responder a este mensaje
#2 Maxi
05/12/2007 - 14:23 | Informe spam
reo ojo que ese codigo no es correcto porque el @@ error es por instruccion
y si el insert da un error pero el select no lo da entonces @@error sera 0

Asi deberia funcionar esto en lugar de lo que usted tiene


insert into tabla1(ncampo)
set @p_error=@@error
if @p_error<>0 then goto TRATAMIENTOERRORES


select ncampo from tabla2




-
Microsoft M.V.P en SQLServer
SQLTotal Consulting - Servicios en SQLServer
Email:
"reo" escribió en el mensaje
news:
tengo un procedimiento que en todo momento se controla si ocurre un error
para hacer un rollback
¿puede ocurrir que por alguna causa se produzca un error y el @@error no
lo coja o bien el rollback
no desaga todo lo ocurrido dentro del begin tran?
y si es asi , ¿como puedo hacer para detectar dicho error?

mi procedimiento es de este estilo

create procedure Volcar()
as
set nocount on
begin transaction

insert into tabla1(ncampo)
select ncampo from tabla2
set @p_error=@@error
if @p_error<>0 then goto TRATAMIENTOERRORES

commit tran
goto FIN
TRATAMIENTOERRORES:
rollback tran
FIN:
set nocount off

muchas gracias

Respuesta Responder a este mensaje
#3 Alejandro Mesa
05/12/2007 - 16:18 | Informe spam
reo,

Estos articulos te ayudaran a entender un poquito mejor el tratamiento de
errores en T-SQL, cosa que no es nada amigable, pues no todos los errores
tienen los mismos efectos. Hay errores que solo abortan la sentencia en
curso, pero siguen a la sgte en el batch, hay otros que abortan el batch,
otros que abortan la conexion, etc. En algunos errores SQL Server hace un
rollback pero en otros no.

Error Handling in SQL Server – a Background
http://www.sommarskog.se/error-handling-I.html

Implementing Error Handling with Stored Procedures
http://www.sommarskog.se/error-handling-II.html


AMB

"reo" wrote:

tengo un procedimiento que en todo momento se controla si ocurre un error
para hacer un rollback
¿puede ocurrir que por alguna causa se produzca un error y el @@error no lo
coja o bien el rollback
no desaga todo lo ocurrido dentro del begin tran?
y si es asi , ¿como puedo hacer para detectar dicho error?

mi procedimiento es de este estilo

create procedure Volcar()
as
set nocount on
begin transaction

insert into tabla1(ncampo)
select ncampo from tabla2
set @p_error=@@error
if @p_error<>0 then goto TRATAMIENTOERRORES

commit tran
goto FIN
TRATAMIENTOERRORES:
rollback tran
FIN:
set nocount off

muchas gracias



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