How to ROLLBACK a transaction when testing using tSQLt

前端 未结 4 1407
离开以前
离开以前 2021-01-12 15:05

I recently was calling a procedure that contained a rasierror in the code. The raiserror was in a try catch block. Also a BEGIN TRAN was in the same try catch block after

4条回答
  •  悲&欢浪女
    2021-01-12 15:31

    +1 to both the above answers.

    However, if you don't want to use TRY .. CATCH, please try the following code. The part between the lines ----- represents the test, and above and below that represents tSQLt, before and after it calls your test. As you can see, the transaction started by tSQLt before calling the test, is still in place, as it expects, whether or not the error occurs. @@TRANSCOUNT is still 1

    You can comment out the RAISERROR to try it with and without the exception being raised.

    SET NOCOUNT ON
    
    BEGIN TRANSACTION  -- DONE BY tSQLt
    PRINT 'Inside tSQLt before calling the test: @@TRANCOUNT = ' + CONVERT (VARCHAR, @@TRANCOUNT)
    
        ---------------------------------
        PRINT '  Start of test ---------------------------'
    
        SAVE TRANSACTION Savepoint
        PRINT '  Inside the test: @@TRANCOUNT = ' + CONVERT (VARCHAR, @@TRANCOUNT)
    
    
        BEGIN TRANSACTION -- PART OF THE TEST
        PRINT '    Transaction in the test: @@TRANCOUNT = ' + CONVERT (VARCHAR, @@TRANCOUNT)
    
            RAISERROR ('A very nice error', 16, 0)
    
            PRINT '  @@ERROR = ' + CONVERT(VARCHAR,@@ERROR)
    
    
        -- PART OF THE TEST - CLEAN-UP
        IF @@ERROR <> 0 ROLLBACK TRANSACTION Savepoint   -- Not all the way, just tothe save point
        ELSE COMMIT TRANSACTION
    
        PRINT '  About to finish the test: @@TRANCOUNT = ' + CONVERT (VARCHAR, @@TRANCOUNT)
    
        PRINT '  End of test ---------------------------'
    
        ---------------------------------
    
    ROLLBACK TRANSACTION   -- DONE BY tSQLt
    PRINT 'Inside tSQLt after finishing the test: @@TRANCOUNT = ' + CONVERT (VARCHAR, @@TRANCOUNT)
    

    With acknowledgement to information and code at http://www.blackwasp.co.uk/SQLSavepoints.aspx

提交回复
热议问题