Hola a todos, tengo un cursor pero demanda muchos recursos al generar
un conjunto de registros.
Se tiene una tabla articulos y otra tabla empresas.
Para reconstruir el inventario o el stock se generara una gran
cantidad re registros, ejemplo: Si tengo 50 000 articulos, y 10
empresas entonces generaria 50 000ArticulosX10Empresas X 365 días (Si
quiero reconstruir el inventario para todo un año). La cantidad re
registros generados son millones.
Necesito mejorar el rendimiento de este cursor, convertirlo a
funiones, o quizas a una sola sentencia SQL. Gracias por su ayuda.
El problema lo he resuelto con cursores, pero el rendimiento no es el
esperado, el codigo es el siguiente:
DECLARE @var_empresa varchar(255)
DECLARE c_empresa CURSOR FOR
SELECT ID FROM DATAAREA where upper(ID) = 'IS' Solo tomamos una
empresa (<> DAT tiene que ser)
OPEN c_empresa
FETCH NEXT FROM c_empresa
INTO @var_empresa
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @fecha1 datetime, @fecha2 datetime,@valor_fecha datetime
SET @fecha1='04/05/2008'
SET @fecha2='05/05/2008'
DECLARE c_interfechas CURSOR FOR
SELECT BISaludes.dwh.DIM_FECHA.Fecha from BISaludes.dwh.DIM_FECHA
where BISaludes.dwh.DIM_FECHA.Fecha>=@fecha1 and
BISaludes.dwh.DIM_FECHA.Fecha<=@fecha2
open c_interfechas
FETCH NEXT FROM c_interfechas
INTO @valor_fecha
WHILE @@FETCH_STATUS = 0
BEGIN
insert into TT_ValoresInventario
SELECT distinct null AS IDValorInventario, itemid,@var_empresa as
IDEmpresa,null as stock,null as importe,GETDATE() AS
Fecha_Carga,@valor_fecha as Fecha_Inventario,
null as stock_inventsum,null as inventsum,null as
stock_inventtrans,null as importe_inventtrans
from inventtable
where inventtable.itemid in (select distinct itemid from inventtrans
union select distinct itemid from inventsum)
FETCH NEXT FROM c_interfechas
INTO @valor_fecha
END
CLOSE c_interfechas
DEALLOCATE c_interfechas
FETCH NEXT FROM c_empresa
INTO @var_empresa
END
CLOSE c_empresa
DEALLOCATE c_empresa
Leer las respuestas