como Chris mencionó, se debe tener cuidado con la transacción rodar hacia atrás.
Específicamente esto:
IF @@TRANCOUNT > 0 ROLLBACK
no es siempre lo que quiere. Se podría hacer algo como esto
IF(@@TRANCOUNT = 1) ROLLBACK TRAN
ELSE IF(@@TRANCOUNT > 1) COMMIT TRAN
RETURN @error
De esta manera, el proc llamada puede inspeccionar el valor devuelto por el procedimiento almacenado y determinar si se quiere comprometerse de todos modos o continuar a propagarse por el error.
La razón es que 'COMPRAR' simplemente disminuirá el contador de su transacción. Una vez que disminuye el contador de transacciones a cero, se producirá una confirmación real.
Esto no es del todo cierto.En realidad, las operaciones en variables de tabla están fuera del alcance de la transacción; una reversión no afecta los cambios que se hayan realizado en la variable de la tabla. –
Bueno, me refiero a todo lo que haces * a la base de datos * - Supongo que asumí que era obvio que las variables no se ven afectadas por las transacciones, aunque supongo que es un poco menos intuitivo con variables de tabla que variables escalares. – Blorgbeard
¿Qué sucede si el SP llamado dentro de las llamadas de transacción externas confirma la transacción? ¿Se retrotraerá la transacción interna si la transacción externa llama a la reversión después de que se haya comprometido el interno? – holaSenor