ssandu:Am patit un fapt interesant.
BEGIN TRANSACTION
INSERT INTO Tabela1 ....
INSERT INTO Tabela2 ...
COMMIT
Ai patit un fapt banal. Ai comis o transactie fara ca sa te intereseza daca rezultatul ei e consistent sau nu. Daca verifici @@ERROR, trebuie sa-l verifici dupa fiecare statement. Daca primul INSERT a picat (e.g. unique constraint violation), al doilea INSERT va reseta @@ERROR.
Nu e clar din exemplu daca transactia este o subtranzactie intr-o alta tranzactie. Daca nu e, atunci codul e incorect si pentru ca incearca sa faca ROLLBACK dupa ce a facut COMMIT. Daca e, atunci codul risca sa devina incorect la o schimbare minora (e.g. daca caller-ul nu mai porneste o tranzactie explicita). Normal COMMIT-ul se face pe un branch al IF-ului si ROLLBACK pe celalalt.
Numai de bine,
~Remus
http://rusanu.com