SQL - TRANSACCIONES ANIDADAS SQL 2005

   
Vista:

TRANSACCIONES ANIDADAS SQL 2005

Publicado por DALSOM (197 intervenciones) el 25/12/2008 17:47:35
HOLA A TODOS, ESTUBE BUSCANDO DE LAS TRANSACCIONES ANIDADAS, SEGUN VEO EN EL FORO, SI SE PUEDE, Y TAL CUAL ESTAN DESCRIBIENDO LO ESTOY HACIENDO. LO QUE NO ENTIENDO ES QUE PUEDO ESTAR HACIENDO MAL, YA QUE CUANDO HAGO EL PRIMER ROLLBACK TRANSACTION, SE VAN TODAS.

HAGO ESTE CODIGO :

BEGIN TRANSACTION UNO

INSERT INTO TABLA1(FDESC) VALUES('TEST TRAN 1')
SELECT * FROM TABLA1 WHERE ID = @@IDENTITY

BEGIN TRANSACTION DOS
INSERT INTO TABLA1(FDESC) VALUES('TRAN 2 TEST')
SELECT * FROM TABLA1 WHERE ID = @@IDENTITY

-- DEBERIA TENER DOS CAMPOS NUEVOS AGREGADOS HASTA ESTA LINEA.

ROLLBACK TRANSACTION DOS

-- NO DA NINGUN ERROR...

SELECT * FROM TABLA1

ROLLBACK TRANSACTION UNO

-- ERROR DE QUE EL ROLLBACK NO TIENE UNA TRANSACCION CORRESPONDIENTE ABIERTA.

SELECT * FROM TABLA1

-- TIENE EL MISMO NUMERO DE FILAS, SIN NINGUNA AGREGADA.

NO SE QUE ESTOY HACIENDO MAL. AGRADECERE SU EXPLICACION CON TODO DETALLE, YA QUE CREO ESTOY HACIENDO ALGO MAL, PERO NO ENTIENDO QUE PODRA SER.

UTILIZO SQL SERVER EXPRESS 2005.

GRACIAS, Y
FELICIDADES EN ESTA NAVIDAD 2008.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:TRANSACCIONES ANIDADAS SQL 2005

Publicado por Christian Calvo (22 intervenciones) el 30/12/2008 04:47:58
Si deseas más información inscribete a los fotos de http://www.rdba.com.mx

Aquí te dejo un pequeño artículo, en resumen:

COMMIT TRAN reduce el trancount de las transacciones anidadas PERO NO HACE UN COMMIT REAL, esto es que para hacer el commit de todas las transacciones debes hacer commit para cada una de las anidadas.

ROLLBACK TRAN hace rollback de todas, no puede hacer un rollback de una sola.

Entendamos que una transaccion anidada es una transaccion dentro de otra transaccion, por consecuencia, que todo lo que haya dentro de una transaccion (anidada o no) se deshace con un rollback (aunque adentro tengas otras transacciones con commit).

las transacciones anidadas sirven más que nada para darle estructura al manejo de tus transacciones, por ejemplo, su tuvieras un stored procedure que maneja transacciones y creas un stored procedure que mande llamar a varios stored procedures, si no existiera el manejo de transacciones anidadas marcaría ERROR, sin embargo la logica es la misma, una transaccion maestra puede llamar transacciones hijas pero la que manda es la maestra.

Espero te sirva la información.

Transacciones anidadas
Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones anidadas.
Esto quiere decir que podemos tener transacciones dentro de transacciones, es decir, podemos empezar una nueva transacción sin haber terminado la anterior.
Asociada a esta idea de anidamiento existe una variable global @@TRANCOUNT que tiene valor 0 si no existe ningún nivel de anidamiento, 1 si hay una transacción anidada, 2 si estamos en el segundo nivel de anidamiento… y así sucesivamente.

La dificultad de trabajar con transacciones anidadas está en el comportamiento que tienen ahora las sentencias ‘COMMIT TRAN’ y ‘ROLLBACK TRAN’
ROLLBACK TRAN: Dentro de una transacción anidada esta sentencia deshace todas las transacciones internas hasta la instrucción BEGIN TRANSACTION más externa.
COMMIT TRAN: Dentro de una transacción anidada esta sentencia únicamente reduce en 1 el valor de @@TRANCOUNT, pero no “finaliza” ninguna transacción ni “guarda” los cambios. En el caso en el que @@TRANCOUNT=1 (cuando estamos en la última transacción) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la conexión y reduce @@TRANCOUNT a 0.

Quizás estos dos gráficos nos ayuden a entender el comportamiento de estas sentencias cuando hay varios niveles de anidamiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:TRANSACCIONES ANIDADAS SQL 2005

Publicado por DALSOM (1 intervención) el 30/12/2008 16:06:59
GRACIAS, MIL.

PERO ESTA INFORMACION SOLO CONFIRMA EL PROBLEMA. YA SE QUE ES ASI COMO DEBERIA FUNCIONAR. LO QUE NO ENTIENDO, ES POR QUE NO LO ESTA HACIENDO.

SEGUN MI PEQUEÑO CODIGO, TENGO 2 BEGIN TRANSACTION, Y DOS ROLLBACK TRAN. AL FINAL, NO DEBE OCURRIR NINGUN ERROR, Y LAS TABLAS AFECTADAS, DEBERIAN ESTAR COMO ANTES DE INICIAR LA TRANSACCION PRINCIPAL.

GRACIAS, SEGUIRE BUSCANDO EN ESE PORTAL QUE ME DISTE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar