Basic template for Transactions in sqlserver

前端 未结 4 1691
南笙
南笙 2020-12-23 23:24

If I simply wrap my query with:

BEGIN TRANSACTION



COMMIT TRANSACTION

If anything fails inside of that, will it automatically rollback?

4条回答
  •  Happy的楠姐
    2020-12-23 23:41

    I typically do something like this inside my stored procedures. It keeps things nice and safe and passes along any errors that I encounter.

    SET XACT_ABORT ON;
    
    BEGIN TRY
        BEGIN TRANSACTION;
    
        -- Code goes here
    
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
            ROLLBACK TRANSACTION;
    
        DECLARE
            @ERROR_SEVERITY INT,
            @ERROR_STATE    INT,
            @ERROR_NUMBER   INT,
            @ERROR_LINE     INT,
            @ERROR_MESSAGE  NVARCHAR(4000);
    
        SELECT
            @ERROR_SEVERITY = ERROR_SEVERITY(),
            @ERROR_STATE    = ERROR_STATE(),
            @ERROR_NUMBER   = ERROR_NUMBER(),
            @ERROR_LINE     = ERROR_LINE(),
            @ERROR_MESSAGE  = ERROR_MESSAGE();
    
        RAISERROR('Msg %d, Line %d, :%s',
            @ERROR_SEVERITY,
            @ERROR_STATE,
            @ERROR_NUMBER,
            @ERROR_LINE,
            @ERROR_MESSAGE);
    END CATCH
    

提交回复
热议问题