SQL Server 2005 Novo zavedený spôsob, ako rollback transakcie v SQL Server 2005
SET XACT_ABORT ON
keď je na XACT_ABORT. V T-SQL automaticky rollback transakcie, kedy chyba v účtovnej závierke.
SET XACT_ABORT ON
POUŽITIE EMP
BEGIN TRAN
Vložiť do EmpInfo hodnôt(1)
Vložiť do EmpInfo hodnôt(1) — Toto vyhlásenie zvýši primárny kľúč chybu
Vložiť do EmpInfo hodnôt(2)
Commit Tran
Prvý riadok statment vykoná bez chýb. Primárny kľúč chyba zvýši v druhom rade. Ale celý blok transakcie nebude, pretože sa dopustil v XACT_ABORT na.
Mali by ste vedieť, že XACT_ABORT ukončí aktuálnu * Dávkový *, nie celý príkaz. Dávky sú oddelené GO kľúčového slova. Prevedenie bude pokračovať na začiatku budúceho šarže.
Táto funkcia je v SQL Server 2000, aj keď sa chová trochu inak pre rôzne chyby.
V SQL 2000, existujú prípady, keď XACT_ABORT nedokáže rollback transakcie automaticky.
Napríklad:
Vloženie do neplatným názvu stĺpca.
Vloženie do primárneho kľúča s IDENTITY_INSERT OFF.
Vykonávanie SELECT, ktorý používa neexistujúce UDF.
Tieto typy chýb sú zvyčajne dôsledkom zle autorom príkazu, takže sa nevyskytujú v deň-to-day prevádzku vášho programu, ak niekto zmení schéma. Ale ja s prihliadnutím na ich možností, kedy autorské skripty aktualizáciu databázy pri nasadení novej verzie projektu, len v prípade nasadenia nejde podľa plánu.
Existujú spôsoby, ako zvládnuť tieto chyby. Váš COMMIT by mal byť v dávke poskytujúceho DML príkazy. Po dávke (po GO kľúčového slova) môžete skontrolovať @ @ TRANCOUNT, či je väčšia ako nula a podľa toho konať. Obvykle ROLLBACK transakcie.
Transakcia môže zahŕňať dávky, takže ich môžete previesť na vrátenie späť do následné dávky.