Al final de cuentas, lo importante es que las transacciones esten vivas el menor tiempo posible.
Esto quiere decir que puedes tener una o muchas, pero tienes que tratar de que graben sus datos lo antes posible.
Un ejemplo:
Cada acción tiene su StartTransaction y su Commit. La cantidad de transacciones abiertas es siempre 1.
Código:
T1.StartTransaction --- ultima transaccion activa=1, próxima transacción=2
insert factura número 1.
T1.Commit --- ultima transaccion activa=1, próxima transacción=2
T2.StartTransaction --- ultima transaccion activa=2, próxima transacción=3
insert factura número 2.
T2.Commit --- ultima transaccion activa=2, próxima transacción=3
T3.StartTransaction --- ultima transaccion activa=3, próxima transacción=4
insert factura número 3.
T3.Commit --- ultima transaccion activa=3, próxima transacción=4
T4.StartTransaction --- ultima transaccion activa=4, próxima transacción=5
update factura numero 1
T4.Commit --- ultima transaccion activa=4, próxima transacción=5
Se abren transacciones con StartTransaction pero no se hace Commit hasta cerrar la aplicación. La cantidad de transacciones abiertas sube con cada acción.
(En este caso T1 se abre al principio y se cierra la última. Esto hace que el resto de transacciones deban esperar a que se haga commit, para poder hacer commit de sus propios datos)
Código:
T1.StartTransaction --- ultima transaccion activa=1, próxima transacción=2
insert factura número 1.
T2.StartTransaction --- ultima transaccion activa=1, próxima transacción=3
insert factura número 2.
T3.StartTransaction --- ultima transaccion activa=1, próxima transacción=4
insert factura número 3.
T4.StartTransaction --- ultima transaccion activa=1, próxima transacción=5
update factura numero 1
T4.Commit --- ultima transaccion activa=1, próxima transacción=5
T3.Commit --- ultima transaccion activa=1, próxima transacción=5
T2.Commit --- ultima transaccion activa=1, próxima transacción=5
T1.Commit --- ultima transaccion activa=5, próxima transacción=5