Escribir en una tabla de log luego de un ROLLBACK TRAN

10/05/2006 - 16:50 por Alejandro Giardino | Informe spam
Hola a todos, quisiera poder escribir en una talba luego de la una
sentencia ROLLBACK TRAN en caso de producirse un error en una transacción.
Mando un codigo minimo de ejemplo:

BEGIN TRAN MiTransaccion
declare @err int
insert into tabla1 (valor_1, valor_2 , ... , valor_n)
set @err = @@error

IF @err <> 0
BEGIN
ROLLBACK TRAN MiTransaccion
insert into tabla2 (valor_1, valor_2 , ... , valor_n)
END

commit TRAN MiTransaccion



El problema que tengo es que si hay un error y se ejecuta el "ROLLBACK TRAN"
MiTransaccion, no se ejecuta el "insert into tabla2 (valor_1, valor_2 , ...
, valor_n)"
Tal vez la solución pasa por encararlo desde otro lado pero no se me ocurre
como.

Gracias a todos
 

Leer las respuestas

#1 Alejandro Mesa
10/05/2006 - 17:25 | Informe spam
Alejandro,

Posiblemente el error cause que el batch completo sea abortado sin que se
haya ejecutado "rollback transaction" y por eso no pasa por la sentencia
"insert". Tambien puede ser posible que la sentencia "commit transaction" te
este dando error porque hicistes un rollback pero no veo que uses "return"
despues de insertar en "tabla2", lo que implicaria que esta no tenga una
sentencia "begin transaction" que asociada.

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

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


AMB

"Alejandro Giardino" wrote:

Hola a todos, quisiera poder escribir en una talba luego de la una
sentencia ROLLBACK TRAN en caso de producirse un error en una transacción.
Mando un codigo minimo de ejemplo:

BEGIN TRAN MiTransaccion
declare @err int
insert into tabla1 (valor_1, valor_2 , ... , valor_n)
set @err = @@error

IF @err <> 0
BEGIN
ROLLBACK TRAN MiTransaccion
insert into tabla2 (valor_1, valor_2 , ... , valor_n)
END

commit TRAN MiTransaccion



El problema que tengo es que si hay un error y se ejecuta el "ROLLBACK TRAN"
MiTransaccion, no se ejecuta el "insert into tabla2 (valor_1, valor_2 , ...
, valor_n)"
Tal vez la solución pasa por encararlo desde otro lado pero no se me ocurre
como.

Gracias a todos



Preguntas similares