sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man återställer eller utför en transaktion i SQL Server

Den goda nyheten är att en transaktion i SQL Server kan sträcka sig över flera batcher (varje exec). behandlas som en separat batch.)

Du kan radbryta din EXEC uttalanden i en BEGIN TRANSACTION och COMMIT men du måste gå ett steg längre och återställa om några fel uppstår.

Helst skulle du vilja ha något sånt här:

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

    IF @@TRANCOUNT > 0
        ROLLBACK
END CATCH

BEGIN TRANSACTION och COMMIT Jag tror att du redan är bekant med. BEGIN TRY och BEGIN CATCH block är i princip till för att fånga upp och hantera eventuella fel som uppstår. Om någon av dina EXEC satser ger upphov till ett fel, kommer kodexekveringen att hoppa till CATCH blockera.

Din befintliga SQL-byggnadskod bör ligga utanför transaktionen (ovan) eftersom du alltid vill hålla dina transaktioner så korta som möjligt.




  1. Hur man sparar uppladdade bildnamn i MySQL-databasen

  2. SQL Server-kontrolltabell partitionerad

  3. Skapa flera sidor från sql-fråga

  4. Hur YEAR() fungerar i MariaDB