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

Sådan ruller du tilbage eller begår en transaktion i SQL Server

Den gode nyhed er, at en transaktion i SQL Server kan spænde over flere batches (hver exec). behandles som en separat batch.)

Du kan pakke din EXEC udsagn i en BEGIN TRANSACTION og COMMIT men du bliver nødt til at gå et skridt videre og rulle tilbage, hvis der opstår fejl.

Ideelt set vil du gerne have noget som dette:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

BEGIN TRANSACTION og COMMIT Jeg tror, ​​du allerede er bekendt med. BEGIN TRY og BEGIN CATCH blokke er grundlæggende til for at fange og håndtere eventuelle fejl, der opstår. Hvis nogen af ​​dine EXEC sætninger rejser en fejl, vil kodeudførelsen hoppe til CATCH blok.

Din eksisterende SQL-bygningskode bør være uden for transaktionen (ovenfor), da du altid ønsker at holde dine transaktioner så korte som muligt.




  1. Kun ét udtryk kan angives i valglisten, når underforespørgslen ikke er introduceret med EXISTS

  2. MySQL-samling til portugisisk

  3. MySql UNION til OPDATERING

  4. Indsigt i SQL Server Unique Constraints