Ver Mensaje Individual
  #2  
Antiguo 16-07-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 26
guillotmarc Va por buen camino
Es tan fácil de probar, que acabarias mucho antes probandolo.

Teoricamente, al deshacer la transacción de la conexión, también se desharan los cambios hechos en la transacción confirmada del procedimiento almacenado.

Esto es así por la forma en que se han implementado las transacciones anidadas de SQL Server. No són verdaderas transacciones anidadas, sinó que están ahí para poder modularizar bien el código. Es decir para poder poner una transacción en un procedimiento almacenado, y que esto no falle al ejecutarlo desde donde se ha llamado (pongamos que se llama desde otro procedimiento) porqué hayamos iniciado allí otra transacción. De esta forma evitamos tener que saber si un procedimiento inicia o no transacciones.

Aunque en realidad todas las transacciones anidadas, actuan como una unica transacción. Si en cualquiera de los niveles se ejecuta un RollBack, se deshacen todos los cambios de todos los niveles de anidamiento (no solo de las transacciones interiores a la actual, sino incluso de las exteriores). Y respecto a la confirmación, la unica válida es la de la transacción más exterior, puesto que el resto de transacciones, aunque sean confirmadas, sus cambios serán deshechos por un Rollback en una transacción exterior.

NOTA : Llamo transacciones interiores a las que se inician y finalizand dentro de la transacción actual, y exteriores a las que se han iniciado anteriormente (y que por tanto aún deben estar pendientes de finalización).

Aunque todo esto es teoria, es mejor perder un minuto programando un caso de prueba y confirmarlo sin lugar a dudas.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita