Problema con transacciones

09/01/2008 - 17:36 por Alhambra Eidos Kiquenet | Informe spam
Hola a todos,

estoy con Sql Server 2000 y el analizador de consultas exclusivamente.


En el Analizador de consultas hago lo siguiente:


CREATE TABLE Test (Columna int PRIMARY KEY)


begin tran t1


save tran t1


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 1


INSERT INTO Test VALUES (1xx)


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 1


INSERT INTO Test VALUES ('1xx')
tipo de datos int.


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 0 !!!!!!


rollback tran t1 -- Falla si @@TRANCOUNT vale 0


commit tran -- Falla si @@TRANCOUNT vale 0


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 0
SELECT * FROM Test


DROP TABLE Test


Tengo dos Inserts dentro de una transacción. Los dos inserts fallan. El
último me cancela la transacción al fallar, TRANCOUNT pasa de 1 a 0 !!!


INSERT INTO Test VALUES (1xx)


Para este Insert, después de su ejecución, TRANCOUNT sigue valiendo 1


INSERT INTO Test VALUES ('1xx')
tipo de datos int.


Para este Insert, después de su ejecución, TRANCOUNT pasa a valer 0 !!!
No entiendo el porqué... alguien puede aclararme, estoy desesperado...


Gracias a todos.



http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft
 

Leer las respuestas

#1 Alejandro Mesa
09/01/2008 - 19:24 | Informe spam
Alhambra Eidos Kiquenet,

SQL Server no se compaorta o trata de igual manera todos los errores. Existe
un grupo para el cual SQL Server aborta la transaccion, si esta existe. Es
por eso que se debe usar @@TRANCOUNT o la funcion XACT_STATE(), en
dependencia si tienes prendida la opcion SET XACT_ABORT, para comprobar antes
de usar COMMIT o ROLLBACK.

IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION

Estos dos articulos hacen un analisis profundo del tratamiento de errores en
SQL Server.

Error Handling in SQL Server – a Background
http://www.sommarskog.se/error-handling-I.html

Implementing Error Handling with Stored Procedures
http://www.sommarskog.se/error-handling-II.html


AMB


"Alhambra Eidos Kiquenet" wrote:

Hola a todos,

estoy con Sql Server 2000 y el analizador de consultas exclusivamente.


En el Analizador de consultas hago lo siguiente:


CREATE TABLE Test (Columna int PRIMARY KEY)


begin tran t1


save tran t1


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 1


INSERT INTO Test VALUES (1xx)


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 1


INSERT INTO Test VALUES ('1xx')
tipo de datos int.


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 0 !!!!!!


rollback tran t1 -- Falla si @@TRANCOUNT vale 0


commit tran -- Falla si @@TRANCOUNT vale 0


select @@ERROR, @@ROWCOUNT, @@TRANCOUNT -- @@TRANCOUNT vale 0
SELECT * FROM Test


DROP TABLE Test


Tengo dos Inserts dentro de una transacción. Los dos inserts fallan. El
último me cancela la transacción al fallar, TRANCOUNT pasa de 1 a 0 !!!


INSERT INTO Test VALUES (1xx)


Para este Insert, después de su ejecución, TRANCOUNT sigue valiendo 1


INSERT INTO Test VALUES ('1xx')
tipo de datos int.


Para este Insert, después de su ejecución, TRANCOUNT pasa a valer 0 !!!
No entiendo el porqué... alguien puede aclararme, estoy desesperado...


Gracias a todos.



http://www.alhambra-eidos.es/web2005/index.html
www.kiquenet.net
http://www.setbb.com/putainformatic...opic.php?p„3
www.trabajobasura.com/solusoft

Preguntas similares