PDA

Ver la Versión Completa : ADOConection.CommitTrans con StoreProcedures...


Cabanyaler
16-07-2003, 14:28:35
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.