SQL Server 2005 nowo wprowadzonego drogę do wycofania transakcji w SQL Server 2005
SET XACT_ABORT ON
gdy XACT_ABORT jest. T-SQL automatycznie wycofać transakcję, gdy błąd w deklaracji.
SET XACT_ABORT ON
UŻYWAJ emp
Rozpocznij Tran
Włóż do EmpInfo wartości(1)
Włóż do EmpInfo wartości(1) — Oświadczenie to będzie podnieść klucz podstawowy błąd
Włóż do EmpInfo wartości(2)
Commit Tran
Pierwsza linia statment wykona bez żadnych błędów. Klucz podstawowy błąd wzbudzi w drugiej linii. Ale cała transakcja blok nie zostanie oddany bo XACT_ABORT w na.
Należy zauważyć, że XACT_ABORT kończy partię * bieżących *, nie cała komenda. Partie są oddzielone GO kluczowych. Egzekucja będzie na początku kolejnej partii.
Funkcja ta jest również w SQL Server 2000, choć zachowuje się nieco inaczej w różnych błędów.
W SQL 2000, istnieją przypadki, gdy XACT_ABORT nie zdoła wycofać transakcję automatycznie.
Na przykład:
Wkładanie do nieprawidłowej nazwy kolumny.
Wkładanie do klucza podstawowego z IDENTITY_INSERT OFF.
Wykonywanie SELECT, który używa nieistniejącego UDF.
Tego typu błędy są zwykle ze względu na słabo autorskie polecenia, więc nie występują one w dzień-to-day działania programu, chyba że ktoś zmienia schemat. Ale stanowią ich możliwości, gdy skrypty autorskie aktualizacji baz danych podczas wdrażania nowej wersji projektu, tylko w przypadku wdrożenia nie idzie zgodnie z planem.
Istnieją sposoby, aby obsłużyć te błędy. Twój COMMIT powinny być w partii, realizującego DML. Po partii (po GO kluczowych) można sprawdzić @ @ TRANCOUNT aby sprawdzić, czy jest większy od zera i podjąć odpowiednie działania. Zazwyczaj ROLLBACK transakcji.
Transakcje mogą obejmować partii, dzięki czemu można wykonać rollback w kolejnej partii.