hola,
el problema es que tengo que un proceso en SP el cual tengo que optimizar
debido a que se esta tomando casi 4 horas en ejecutar.
basicamente el proceso debe prorratear los servicios realizados por un
trabajador dentro de los dias indicados.
para prorratear debo sumarizar por fecha lo debengado y distribuirlo dentro
de los servicios realizados.
tengo 2 cursores. el primero me identifica los dias ordinarios sobre los
que tengo que distribuir los servicios. el segundo obtiene el monto a
distribuir por fecha.
o domingos
declare cur_participar cursor fast_forward for
select codemp, sum(isnull(cantidad,0)) as diasOrd
from servicio_realizado with ( nolock )
join detser_serv with ( nolock ) on codcia = codcia and fecha = fecha and
codsre = codigo
where codcia = @codcia
and codtpl = @codtpl
and codpla = @codpla
and codcsr = 15
and codgsr = 1
and codsrv = 1
group by fecha, codemp
for read only
open cur_participar
fetch next from cur_participar into @codemp, @diasOrd
while @@fetch_status = 0
begin
if @diasord > 0 begin
declare cur_procesa cursor fast_forward for
select fecha, sum(isnull(cantidad,0))
from servicio_realizado with ( nolock )
join detser_serv with ( nolock ) on codcia = codcia and fecha = fecha and
codsre = codigo
where codcia = @codcia
and codtpl = @codtpl
and codpla = @codpla
and codcsr = 1
and codgsr = 2
group by fecha
for read only
set @contador = 0
open cur_procesa
fetch next from cur_procesa into @fecha, @cantidad
while @@fetch_status = 0
begin
realizados por dia.
update detser_serv set segmen01 = convert(decimal(10,2), ( 1 / @cantidad
) * cantidad )
from servicio_realizado with ( nolock )
join detser_serv with ( nolock ) on codcia = codcia and fecha = fecha and
codsre = codigo
where codcia = @codcia
and codtpl = @codtpl
and codpla = @codpla
and fecha = @fecha
and codemp = isnull(@codemp, dse_codemp)
and codcsr = 1
and codgsr = 2
set @contador = @contador + 1
existentes trabajados.
ingresados.
if @contador >= @diasOrd break
fetch next from cur_procesa into @fecha, @cantidad
end
close cur_procesa
deallocate cur_procesa
end
fetch next from cur_participar into @codemp, @diasOrd, @diasFer
end
close cur_participar
deallocate cur_participar
Leer las respuestas