Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eseguire il rollback o eseguire il commit di una transazione in SQL Server

La buona notizia è che una transazione in SQL Server può estendersi su più batch (ogni exec viene trattato come un batch separato.)

Puoi avvolgere il tuo EXEC istruzioni in un BEGIN TRANSACTION e COMMIT ma dovrai fare un ulteriore passo avanti e ripristinare se si verificano errori.

Idealmente vorresti qualcosa del genere:

BEGIN TRY
    BEGIN TRANSACTION 
        exec( @sqlHeader)
        exec(@sqlTotals)
        exec(@sqlLine)
    COMMIT
END TRY
BEGIN CATCH

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

Il BEGIN TRANSACTION e COMMIT Credo che tu abbia già familiarità con. Il BEGIN TRY e BEGIN CATCH i blocchi sono fondamentalmente lì per catturare e gestire eventuali errori che si verificano. Se uno qualsiasi dei tuoi EXEC le istruzioni generano un errore, l'esecuzione del codice salterà al CATCH bloccare.

Il tuo codice di costruzione SQL esistente dovrebbe essere al di fuori della transazione (sopra) poiché vuoi sempre mantenere le tue transazioni il più brevi possibile.