Crearea și gestionarea tranzacțiilor

Finalizat

Pentru a porni în mod explicit o tranzacție, utilizați BEGIN TRANSACTION sau versiunea scurtată, BEGIN TRAN.

După ce o tranzacție a fost pornită, aceasta trebuie să se încheie cu:

  • COMITERE TRANZACȚIE sau
  • TRANZACȚIA DE REVENIRE.

Acest lucru asigură faptul că toate declarațiile din cadrul tranzacției sunt comise împreună sau reunificate dacă există o eroare.

Tranzacțiile durează până când este emisă o comandă COMITERE SAU ROLLBACK TRANSACTION sau conexiunea este eliminată. Dacă conexiunea este abandonată printr-o tranzacție, întreaga tranzacție este readusă la versiunea anterioară.

Tranzacțiile pot fi imbricate, caz în care tranzacțiile interne vor fi readuse la versiunea anterioară dacă tranzacția exterioară revine.

Nu s-a detectat nicio eroare

Atunci când instrucțiunile din tranzacție s-au terminat fără erori, utilizați COMMIT TRANSACTION, uneori scurtat pentru COMITERE TRAN. Aceasta comite modificările aduse bazei de date. Acest lucru va elibera resurse, cum ar fi blocările deținute în timpul tranzacției.

Dacă este detectată o eroare

Dacă a apărut o eroare în cadrul tranzacției, utilizați comanda ROLLBACK.

ROLLBACK anulează orice modificări aduse datelor în timpul tranzacției, lăsându-l în starea în care a început tranzacția. ROLLBACK lansează, de asemenea, resurse, cum ar fi blocări, deținute pentru tranzacție.

XACT_ABORT

Atunci când SET XACT_ABORT este ACTIVAT, dacă SQL Server ridică o eroare, întreaga tranzacție este readusă la versiunea anterioară. Atunci când SET XACT_ABORT este DEZACTIVAT, doar instrucțiunea care a ridicat eroarea este readusă la starea de eroare dacă severitatea erorii este scăzută.

De exemplu, atunci când SET XACT_ABORT este DEZACTIVATă, o tranzacție are trei instrucțiuni. Două nu au erori, dar a treia încalcă o restricție de verificare. În acest exemplu, chiar dacă cele trei declarații se află într-o tranzacție, două dintre ele sunt comise. În același exemplu, dacă eroarea ar fi fost cauzată de un tip de date incorect, acest lucru ar fi fost suficient de sever pentru a emite o revenire și niciuna dintre declarații nu s-ar fi comis.

Deoarece nu este întotdeauna clar dacă tranzacția va fi comisă sau readusă la versiunea anterioară, este esențial să adăugați o gestionare a erorilor la tranzacții.