The work around is to terminate/commit any outer transaction (only in scenarios where the caller does not have any change *prior to calling sp_addrolemember*, that may need rolling back if something fails *after calling sp_addrolemember*, as this might affect the caller to lose the capability of rolling back unwanted changes).
SET IMPLICIT_TRANSACTIONS OFF -- make sure server does not start any implicit transaction
WHILE XACT_STATE() = 1 -- the transaction is committable
COMMIT TRAN -- Try committing any outer transaction, in order for
EXEC sp_addrolemember
@rolename = 'rolename',
@membername = 'db_user_name'