Iteración lenta y .log crece
Publicado por bomocahe (7 intervenciones) el 05/05/2016 17:20:21
Buenas tardes, he de realizar una query iterativa que inserte datos que no estén aun dentro de la misma tabla que consulto, donde tengo un número de lote y del lote anterior del que procede.
La tabla inicial, como ejemplo, sería:
Lote Lote Parent
---------------------------------
B A
C B
E C
E D
F C
F E
Lo que quiero realizar con la query es que me inserte dentro de esta misma tabla, todos los lotes que se han tenido que usar hasta llegar a ese lote, sin insertar duplicados.
Lot Lot Parent
B A
C A
C B
E A
E B
E C
E D
F A
F B
F C
F D
F E
He realizado esta query, sin embargo, dado que es una tabla con muchos registros me va muy lenta, además el archivo .log de la base de datos y los archivos temporales me crecen a valores de decenas de gb.
DECLARE @Count int
SET @Count=0
WHILE @Count<(SELECT COUNT(*) FROM TABLA_Lotes)
BEGIN
SET @Count=(SELECT COUNT(*) FROM TABLA_Lotes)
INSERT INTO TABLA_Lotes
SELECT Par.Lote, Par.PLote FROM(
SELECT A.[Lote] AS Lote, B.[Lote Parent] AS PLote FROM
TABLA_Lotes A
INNER JOIN TABLA_Lotes B
ON A.[Lote Parent]=B.[Lote]) AS Par
WHERE NOT EXISTS (SELECT * FROM TABLA_Lotes AS Tb WHERE Par.[Lote]=tb.[Lote] AND Par.PLote=Tb.[Lote Parent])
END
¿alguna solución? ¿Tengo algo erróneo?
Muchas gracias.
La tabla inicial, como ejemplo, sería:
Lote Lote Parent
---------------------------------
B A
C B
E C
E D
F C
F E
Lo que quiero realizar con la query es que me inserte dentro de esta misma tabla, todos los lotes que se han tenido que usar hasta llegar a ese lote, sin insertar duplicados.
Lot Lot Parent
B A
C A
C B
E A
E B
E C
E D
F A
F B
F C
F D
F E
He realizado esta query, sin embargo, dado que es una tabla con muchos registros me va muy lenta, además el archivo .log de la base de datos y los archivos temporales me crecen a valores de decenas de gb.
DECLARE @Count int
SET @Count=0
WHILE @Count<(SELECT COUNT(*) FROM TABLA_Lotes)
BEGIN
SET @Count=(SELECT COUNT(*) FROM TABLA_Lotes)
INSERT INTO TABLA_Lotes
SELECT Par.Lote, Par.PLote FROM(
SELECT A.[Lote] AS Lote, B.[Lote Parent] AS PLote FROM
TABLA_Lotes A
INNER JOIN TABLA_Lotes B
ON A.[Lote Parent]=B.[Lote]) AS Par
WHERE NOT EXISTS (SELECT * FROM TABLA_Lotes AS Tb WHERE Par.[Lote]=tb.[Lote] AND Par.PLote=Tb.[Lote Parent])
END
¿alguna solución? ¿Tengo algo erróneo?
Muchas gracias.
Valora esta pregunta
0