Puede permanecer abierto mientras se aplica la agrupación de conexiones. Ejemplo:el tiempo de espera del comando puede dejar bloqueos y TXN porque el cliente envía como "abortar".
2 soluciones:
-
Prueba en el cliente, literalmente:
IF @@TRANCOUNT <> 0 ROLLBACK TRAN
-
Utilice
SET XACT_ABORT ON
para garantizar que se limpie una TXN:Pregunta 1 y Pregunta 2
Siempre uso SET XACT_ABORT ON
.
De este blog del equipo de SQL:
Tenga en cuenta que con la agrupación de conexiones, simplemente cerrar la conexión sin una reversión solo devolverá la conexión al grupo y la transacción permanecerá abierta hasta que se vuelva a utilizar o se elimine del grupo.
Desde MSDN, sección "Soporte de transacciones" (mi negrita)
Cuando se cierra una conexión, se vuelve a liberar en el grupo y en la subdivisión adecuada según su contexto de transacción. Por lo tanto, puede cerrar la conexión sin generar un error, aunque todavía esté pendiente una transacción distribuida. Esto le permite confirmar o cancelar la transacción distribuida en otro momento.