Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ADOConection.CommitTrans con StoreProcedures... (https://www.clubdelphi.com/foros/showthread.php?t=2271)

Cabanyaler 16-07-2003 14:28:35

ADOConection.CommitTrans con StoreProcedures...
 
Hola compañeros.
Mi consulta es la siguiente:
Si tengo dentro de una transacción de ADOConection la llamada a la ejecución de procedimientos almacenados que se ejecutan en el servidor SQL; si por cualquier motivo realizo un RollBack en lugar del CommitTrans, ¿dejan de tener vigencia los cambios hechos por los StoreProcedures?.

Sé que lo podría probar, pero prefiero si alguien lo ha experimentado, que comparta conmigo dicha experiencia.

Gracias a todos

guillotmarc 16-07-2003 21:54:56

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.

Cabanyaler 17-07-2003 08:44:03

Muchas gracias, está clarísimo. Esta mañana en cuanto acabe el trabajo lo pruebo y publico el resultado.


La franja horaria es GMT +2. Ahora son las 04:24:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi