Mira, me puse a leer con cuidado el SP que posteas, y francamente le veo tantos problemas, y tanta falta de limpieza y claridad, que lo tendría que calificar, sin pretender ofenderte, de "código basura".
Creo que lo mejor sería que en lugar de intentar reparar esa cosa, empecemos desde cero, y tratemos de ver cual es el algoritmo que el SP debe cumplir, porque desde el vamos lo que no está clara es la secuencia descriptiva de pasos que deben ejecutarse y para qué.
Por otro lado, desde el inicio te recomiendo que desestimes el uso de cursores. No solo son ineficientes, sino que para el caso específico son INNECESARIOS, dado que iguales resultados se pueden obtener por métodos más performánticos.
¿Sabes escribir un detalle de Caso de Uso?
Cita: 1) El usuario inserta ....
2) El sistema recibe los datos ingresados y:
2.1. Realiza....
2.2. Calcula...
2.3. SI ... entonces .... sino, ....
Bueno, trata de escribir claramente los pasos y a partir de alli podemos crear un SP que realmente haga lo que necesitas.
Por otro lado te hago un comentario: OLVIDATE de ese SP. Está MAL hecho y usas los SP de un modo INCORRECTO.
No se necesita crear y destruir SP para, incluso, usar nombres de tablas variables.