• just a thought, why are they inside procedures and not just a view?

    Could you rewrite them as table functions, in which case you can use CROSS APPLY