• You aren't checking for @@Transcount in your code. Also, you should use a try catch block and return after the error.

    Create Procedure One as

    declare @ErrorMessage varchar(300)

    Begin Tran

    begin try

    exec two

    end try

    begin catch

    if @@Transcount > 0

    Rollback Tran

    select @ErrorMessage = Error_Messate()

    Raiserror (@ErrorMessage, 16,-1);

    return

    end catch

    if @@Transcount > 0

    Commit tran

    go

    Create Procedure two as

    declare @ErrorMessage varchar(300)

    Begin Tran

    begin try

    Update some tables

    end try

    Begin catch

    if @@Transcount > 0

    Rollback Tran

    select @ErrorMessage = Error_Messate()

    Raiserror (@ErrorMessage, 16,-1);

    return

    End catch

    if @@Transcount > 0

    Commit tran

    go

    For better, quicker answers, click on the following...
    http://www.sqlservercentral.com/articles/Best+Practices/61537/

    For better answers on performance questions, click on the following...
    http://www.sqlservercentral.com/articles/SQLServerCentral/66909/