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.
Más entradas de este motor
- 2714There is already an object named in the database (ya existe un objeto con ese nombre en la base de datos)
- 601Could not continue scan with NOLOCK due to data movement (no se pudo continuar el recorrido con NOLOCK por movimiento de datos)
- 50000Error personalizado generado con RAISERROR
- 1101Could not allocate a new page because of insufficient disk space in filegroup (no se pudo asignar una nueva página por falta de espacio en disco en el filegroup)
- 3729Cannot DROP because it is being referenced by object (no se puede eliminar porque otro objeto lo referencia)
- 3961Snapshot isolation transaction failed because the object was modified by a DDL statement (falló la transacción snapshot porque una sentencia DDL modificó el objeto)
- 1785Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths (la restricción FOREIGN KEY puede provocar ciclos o varias rutas de cascada)