Hola a todos:
Mi problema es que deseo crear un procedimiento almacenado recursivo. En este procedimiento declaro el cursor cur_ActActividad. Cuando el procedimiento inicia la primera ejecución crea dicho cursor y cuando se llama a sí mismo el procedimiento intenta volver a crear el mismo cursor por lo tanto me marca el error que el cursor ya existe, debido que el cursor es global en la conexión. Abajo les adjunto el código del procediento en mención.
Que estrategia me sugieren uds. para superar este problema?
Código SQL
[-]CREATE PROC sp_VlrActProducto @IdActividad INT, @StrCriterio TEXT,@Año INT, @Mes SMALLINT
AS DECLARE @actPadre INT
DECLARE @VlrActAct FLOAT
DECLARE @TotActAct FLOAT
DECLARE @Resultado FLOAT
DECLARE @Total FLOAT
DECLARE cur_ActActividad CURSOR FOR
SELECT IdActOrigen, VlrActAct
FROM cstActActividad
WHERE AñoActAct = @Año
AND MesActAct = @Mes
AND IdActDestino = @IdActividad
AND IndHabilitado = 1
SELECT @Total = 0
OPEN cur_ActActividad
FETCH NEXT FROM cur_ActActividad INTO @actPadre, @VlrActAct
IF (@@FETCH_STATUS = 0)
BEGIN WHILE (@@FETCH_STATUS = 0)
BEGIN SELECT @TotActAct = SUM(VlrActAct)
FROM cstActActividad
WHERE AñoActAct = @Año
AND MesActAct = @Mes
AND IdActOrigen = @actPadre
AND IndHabilitado = 1
EXEC @Resultado = sp_VlrActProducto @actPadre, @strCriterio, @Año, @Mes
IF PATINDEX ('%;' + CONVERT(VARCHAR,@actPadre) + ';%', @StrCriterio) > 0 SELECT @Total = @Total + ( @VlrActAct + @Resultado) * @VlrActAct / @TotActAct
ELSE SELECT @Total = @Total + @Resultado * @VlrActAct / @TotActAct
FETCH NEXT FROM cur_ActActividad INTO @actPadre, @VlrActAct
END
END
ELSE SELECT @total = 0
CLOSE cur_ActActividad
DEALLOCATE cur_ActActividad
RETURN(@Total)
Gracias por su colaboración !!