Opret og administrer transaktioner
Hvis du vil starte en transaktion eksplicit, skal du bruge BEGIN TRANSACTION eller den forkortede version BEGIN TRAN.
Når en transaktion er startet, skal den afsluttes med en af følgende:
- BEKRÆFT TRANSAKTION, eller
- ANNULLERINGSTRANSAKTION.
Dette sikrer, at alle sætninger i transaktionen bekræftes sammen eller tilbageføres, hvis der er en fejl.
Transaktioner varer, indtil der er udstedt en COMMIT TRANSACTION- eller ROLLBACK TRANSACTION-kommando, eller forbindelsen afbrydes. Hvis forbindelsen slippes delvist igennem en transaktion, annulleres hele transaktionen.
Transaktioner kan indlejres, og i så fald annulleres de indre transaktioner, hvis den ydre transaktion annulleres.
Der blev ikke fundet nogen fejl
Når sætningerne i din transaktion er fuldført uden fejl, skal du bruge COMMIT TRANSACTION, som nogle gange forkortes til COMMIT TRAN. Dette bekræfter ændringerne i databasen. Dette frigiver også ressourcer, f.eks. låse, der opbevares under transaktionen.
Hvis der registreres en fejl
Hvis der opstod en fejl i transaktionen, skal du bruge kommandoen ROLLBACK.
ROLLBACK fortryder eventuelle ændringer af data under transaktionen og lader dem være i den tilstand, de var, før transaktionen startede. ROLLBACK frigiver også ressourcer, f.eks. låse, der opbevares for transaktionen.
XACT_ABORT
Når SET XACT_ABORT er slået til, annulleres hele transaktionen, hvis SQL Server udløser en fejl. Når SET XACT_ABORT er OFF, er det kun den sætning, der udløste fejlen, der annulleres, hvis alvorsgraden af fejlen er lav.
Når SET XACT_ABORT f.eks. er OFF, har en transaktion tre sætninger. To har ingen fejl, men den tredje bryder en kontrolbegrænsning. Selvom de tre sætninger er i en transaktion i dette eksempel, bekræftes to af dem. Hvis fejlen i det samme eksempel var forårsaget af en forkert datatype, ville dette have været alvorligt nok til at udstede en annullering, og ingen af udsagnene ville være blevet bekræftet.
Da det ikke altid er klart, om transaktionen vil blive bekræftet eller tilbageført, er det vigtigt at føje fejlhåndtering til transaktioner.