Um begin tran no control flow, tento fazer as inserções, e jogo num txt todas as chaves que deram erro durante o processo, e no final eu tenho um rollback tran.
Depois de ter todas as chaves que apresentaram algum tipo de erro no txt, eu faço a inserção fazendo lookup neste arquivo, e inserindo o que não der match.
Eu achei esta a melhor forma, mesmo com o rollback e fazendo a operação duas vezes, o processo demorou apenas 5 minutos, e como está feito atualmente, em uma proc com cursores, demora mais de 4 horas.
Realmente trabalhar com stored procedure da forma que você esta destacando a sua necessidade não seria uma boa solução.