DBAtlas · Atlas de operaciones de bases de datos

3902: The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION (COMMIT TRANSACTION sin BEGIN TRANSACTION correspondiente)

SQL Server

¿Qué significa?

Se ejecutó un COMMIT TRANSACTION, pero no hay ningún BEGIN TRANSACTION abierto correspondiente. No se encontró ninguna transacción que confirmar porque el contador de transacciones (@@TRANCOUNT) es cero.

¿Por qué ocurre?

Uso desequilibrado de BEGIN/COMMIT/ROLLBACK, la transacción ya revertida tras un error, gestión incorrecta de los contadores de transacciones anidadas o llamar de nuevo a COMMIT tras un ROLLBACK en un bloque CATCH.

Cómo solucionarlo

Equilibre el número de sentencias BEGIN y COMMIT. Compruebe @@TRANCOUNT antes de confirmar (IF @@TRANCOUNT > 0 COMMIT). En TRY...CATCH, ante un error haga ROLLBACK según XACT_STATE()/@@TRANCOUNT y evite un COMMIT innecesario. Revise la lógica de transacciones anidadas.

Abrir en DBAtlas →

Más entradas de este motor