Cofnąć transakcji w SQL Server 2005

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.

1 komentarz cofnąć transakcji w SQL Server 2005

  • noreply@blogger.com (Todd)

    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.

Leave a Reply

Możesz użyć tych tagów HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>