2012-06-09 16 views
11

Nunca he entendido para qué sirve una transacción anidada. La comisión de una transacción anidada no compromete nada; solo disminuye @@TRANCOUNT. Y ROLLBACK revierte todo.Propósito de las transacciones anidadas

BEGIN TRANSACTION 
    //do an update 
    BEGIN TRANSACTION 
    //do an insert 
    COMMIT TRANSACTION 
COMMIT TRANSACTION 

¿Cuál es la diferencia con esto:

BEGIN TRANSACTION 
    //do an update 
    //do an insert 
COMMIT TRANSACTION 

Por favor, dame un ejemplo por qué se deben utilizar transacciones anidadas y la forma en que hacen la diferencia.

Saludos, Petar

Respuesta

8

transacciones anidadas permite a su código para llamar a otro código (por ejemplo SP), que utiliza transacciones en sí sin llegar a cometer su transacción cuando que cometen.

Dicho esto, puede usar safepoints para retrotraer el interior de una transacción.

Hay un CodeProject article dedicado a eso.

+0

Puedo usar safepoints sin usar transacciones anidadas. El procedimiento almacenado es un buen punto (nunca he pensado en eso). Pero si no utilizo un procedimiento almacenado en mi transacción (o no llamo a otro código), ¿por qué debería necesitar transacciones anidadas? Constantemente veo ejemplos con transacciones anidadas y no veo el sentido de ellos. –

+0

¿Las transacciones anidadas son útiles solo cuando se llama a un código transaccional externo? –

+1

Estoy de acuerdo con usted y creo que son útiles para llamar al código transaccional externo. La capacidad técnica de SQL Server para manejar transacciones anidadas es importante y no está disponible en todos los sistemas DB. Hay algunos casos (como con los SP mencionados, donde también debería usar ['SET XACT_ABORT ON'] (http://stackoverflow.com/questions/1150032/what-is-the-benefit-of-using-set). -xact-abort-on-a-stored-procedure)) donde pueden anidar "naturalmente". Nunca utilicé explícitamente las transacciones anidadas. – Lucero

0

SI tiene un escenario en el que llama a un SP que contiene otra llamada de SP en él. y ese SP interno también se puede llamar independientemente de su aplicación. En ese caso, es necesario colocar la transacción interna (en el SP interno), así como en el SP padre.

Cuestiones relacionadas