2009-08-13 14 views
9

he estado clasificando toda la cosa transacción anidada en el servidor SQL, y he brillaba estas pepitas de la comprensión del comportamiento de anidado trans':SQL Server 2005: ¿Por qué nombrar transacciones?

  • Al anidar transacciones, sólo el más externa se comprometen a realidad commit.
  • "Commit Trans txn_name", cuando se anida , siempre se aplicará a la transacción más interna , incluso si txn_name se refiere a a una transacción externa.
  • "ROLLBACK TRAN" (sin nombre), incluso en una transacción interna, revertirá todas las transacciones.
  • "ROLLBACK TRAN txn_name" - txn_name debe hacer referencia al nombre txn más externo. De lo contrario, fallará.

Dados estos, ¿hay algún beneficio de nombrar transacciones? No puede usarlo para apuntar a una sección de movimiento específica, ya sea para confirmar o revertir. ¿Es solo para propósitos de comentarios de código?

Gracias,

Yoni

+0

Una razón más, no vale la pena una respuesta IMO, es [aquí] (http://www.sqlskills.com/blogs/paul/code-to-show-rolled-back-transactions-after-a-crash/) –

Respuesta

2

Puede tener procedimientos rollback sólo su propio trabajo en caso de error, permitiendo que la persona que llama para decidir wether a abandonar toda la transacción o recuperar y tratar una ruta alternativa. Ver Exception handling and nested transactions para una plantilla de procedimiento que permite este comportamiento atómico.

+1

¿De verdad? Pero el documento dice que no puede deshacer una transacción anidada interna, solo puede revertir la transacción más externa. No te discuto porque no lo he intentado, solo tengo curiosidad de saber cómo funciona. –

+1

Puede retroceder a un punto de guardado. Creo que no es lo mismo que una transacción con nombre, pero creo que eso es lo que realmente buscas. –

+1

Remus - Buen punto sobre el punto de guardado. De lo contrario, (si no usa Guardar Puntos, que actualmente no soy), ¿no hay beneficio? – user144133

0

La idea es retrotraer parte de su trabajo, como una transacción anidada. No siempre funciona como se esperaba Los procedimientos almacenados utilizando el control de errores de estilo antiguo y puntos de retorno pueden no funcionar como se pretendía cuando se utilizan junto con bloques try ... catch: Avoid mixing old and new styles of error handling.

ya se ha discutido aquí @@ERROR and/or TRY - CATCH

+0

Pero no revierte parte de su trabajo. Anidar transacciones simplemente incrementa @@ TRANCOUNT. Al retrotraer una transacción anidada, se retrotrae todo. A menos que estés hablando de guardar puntos. –

6

Efectivamente Es sólo una mémoire programadores ayudante. Si está tratando con un Tx que tiene una cantidad de transacciones internas, dar cada nombre significativo puede ayudarlo a asegurarse de que las tranacciones estén anidadas apropiadamente y puedan detectar errores de lógica.

+2

+1 por 'aide memoire' –

Cuestiones relacionadas