• I think you want to use a transaction save point:

    [font="Courier New"]Create Table #BPTest(id int)

    begin try

    begin tran OuterTran

    Insert into #BPTest values (1)

    begin try

    save tran InnerTran

    Insert into #BPTest values (2)

    Declare @Error varchar(500)

    set @Error='test'

    RAISERROR(@Error, 16, -1)

    end try

    begin catch

    rollback tran InnerTran

    end catch

    Insert into #BPTest values (3)

    end try

    begin catch

    print Error_Message()

    rollback tran OuterTran

    end catch

    Select * from #BPTest

    drop table #BPTest [/font]