SQL: try … catch rollback

DECLARE @ErrorMessage NVARCHAR(4000)
    ,@ErrorSeverity INT
    ,@ErrorState INT

BEGIN TRY
    BEGIN TRAN

    -- INSERT
    -- UPDATE
    -- DELETE

    COMMIT TRAN
END TRY

BEGIN CATCH
    IF (@@TRANCOUNT > 0)
    BEGIN
        ROLLBACK TRAN
    END

    SELECT @ErrorMessage = ERROR_MESSAGE()
        ,@ErrorSeverity = ERROR_SEVERITY()
        ,@ErrorState = ERROR_STATE()

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (
            @ErrorMessage
            ,@ErrorSeverity
            ,@ErrorState
            )
END CATCH