Creare e gestire transazioni

Completato

Per avviare in modo esplicito una transazione, usare BEGIN TRANSACTION o la versione abbreviata BEGIN TRAN.

Dopo l'avvio di una transazione, è necessario terminare con una delle due operazioni seguenti:

  • COMMIT TRANSACTION
  • ROLLBACK TRANSACTION.

In questo modo, se si verifica un errore, viene eseguito il commit o il rollback di tutte le istruzioni insieme all'interno della transazione.

Le transazioni durano fino a quando non viene eseguito un comando COMMIT TRANSACTION o ROLLBACK TRANSACTION o la connessione viene eliminata. Se la connessione viene interrotta a metà di una transazione, l'intera transazione viene annullata.

Le transazioni possono essere annidate, in questo caso viene eseguito il rollback delle transazioni interne se viene eseguito il rollback della transazione esterna.

Non viene rilevato alcun errore

Quando le istruzioni nella transazione sono state completate senza errori, usare COMMIT TRANSACTION, talvolta abbreviato in COMMIT TRAN. Questo comando esegue il commit delle modifiche apportate al database. In questo modo, verranno anche rilasciate le risorse, ad esempio i blocchi mantenuti durante la transazione.

Se viene rilevato un errore

Se si è verificato un errore all'interno della transazione, usare il comando ROLLBACK.

ROLLBACK annulla le modifiche apportate ai dati durante la transazione, lasciandola nello stato precedente all'avvio della transazione. ROLLBACK rilascia anche risorse, ad esempio blocchi, mantenuti per la transazione.

XACT_ABORT

Quando SET XACT_ABORT è attivato, se SQL Server genera un errore, viene eseguito il rollback dell'intera transazione. Quando SET XACT_ABORT non è attivo, viene eseguito il rollback solo dell'istruzione che ha generato l'errore se la gravità dell'errore è bassa.

Ad esempio, quando SET XACT_ABORT non è attivo, una transazione ha tre istruzioni. Due non hanno errori, ma il terzo interrompe un vincolo di controllo. In questo esempio, anche se le tre istruzioni si trovano in una transazione, due di esse vengono sottoposte a commit. Nello stesso esempio, se l'errore fosse stato causato da un tipo di dati non corretto, questo sarebbe stato abbastanza grave da generare un rollback e nessuna delle istruzioni avrebbe eseguito il commit.

Poiché non è sempre chiaro se verrà eseguito il commit o il rollback della transazione, è essenziale aggiungere la gestione degli errori alle transazioni.