Ayuda!!! Cursos tarda demasiado
Gente,
urgente. Este cursor me tarda mucho. ¿Se os ocurre algo para optimizarla?
DECLARE @IDPADRE VARCHAR(50)
DECLARE @EDAD INT
DECLARE CUR_PADRE CURSOR FOR SELECT DISTINCT COD_SOCIO FROM dbo.HIJOS ORDER BY COD_SOCIO
OPEN CUR_PADRE
FETCH NEXT FROM CUR_PADRE INTO @IDPADRE
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = \\'TEMP_PADRE_HIJOS_NEW\\')
DROP TABLE TEMP_PADRE_HIJOS_NEW
SELECT IDENTITY(INT,1,1) AS ORDEN, EDAD
INTO TEMP_PADRE_HIJOS_NEW
FROM HIJOS
WHERE COD_SOCIO = @IDPADRE
ORDER BY EDAD
UPDATE DBO.FICHERO_MODELIZACION_NEW
SET
EDAD_HIJO_1 = B.EDAD,
EDAD_HIJO_2 = C.EDAD,
EDAD_HIJO_3 = D.EDAD,
EDAD_HIJO_4 = E.EDAD,
EDAD_HIJO_5 = F.EDAD,
EDAD_HIJO_6 = G.EDAD,
EDAD_HIJO_7 = H.EDAD,
EDAD_HIJO_8 = I.EDAD
FROM
DBO.FICHERO_MODELIZACION_NEW AS A
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS B
ON B.ORDEN = 1
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS C
ON C.ORDEN = 2
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS D
ON D.ORDEN = 3
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS E
ON E.ORDEN = 4
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS F
ON F.ORDEN = 5
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS G
ON G.ORDEN = 6
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS H
ON H.ORDEN = 7
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS I
ON I.ORDEN = 8
WHERE
A.COD_SOCIO_INT = CAST(@IDPADRE AS BIGINT)
FETCH NEXT FROM CUR_PADRE INTO @IDPADRE
END
CLOSE CUR_PADRE
DEALLOCATE CUR_PADRE
urgente. Este cursor me tarda mucho. ¿Se os ocurre algo para optimizarla?
DECLARE @IDPADRE VARCHAR(50)
DECLARE @EDAD INT
DECLARE CUR_PADRE CURSOR FOR SELECT DISTINCT COD_SOCIO FROM dbo.HIJOS ORDER BY COD_SOCIO
OPEN CUR_PADRE
FETCH NEXT FROM CUR_PADRE INTO @IDPADRE
WHILE @@FETCH_STATUS = 0
BEGIN
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = \\'TEMP_PADRE_HIJOS_NEW\\')
DROP TABLE TEMP_PADRE_HIJOS_NEW
SELECT IDENTITY(INT,1,1) AS ORDEN, EDAD
INTO TEMP_PADRE_HIJOS_NEW
FROM HIJOS
WHERE COD_SOCIO = @IDPADRE
ORDER BY EDAD
UPDATE DBO.FICHERO_MODELIZACION_NEW
SET
EDAD_HIJO_1 = B.EDAD,
EDAD_HIJO_2 = C.EDAD,
EDAD_HIJO_3 = D.EDAD,
EDAD_HIJO_4 = E.EDAD,
EDAD_HIJO_5 = F.EDAD,
EDAD_HIJO_6 = G.EDAD,
EDAD_HIJO_7 = H.EDAD,
EDAD_HIJO_8 = I.EDAD
FROM
DBO.FICHERO_MODELIZACION_NEW AS A
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS B
ON B.ORDEN = 1
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS C
ON C.ORDEN = 2
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS D
ON D.ORDEN = 3
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS E
ON E.ORDEN = 4
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS F
ON F.ORDEN = 5
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS G
ON G.ORDEN = 6
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS H
ON H.ORDEN = 7
LEFT JOIN TEMP_PADRE_HIJOS_NEW AS I
ON I.ORDEN = 8
WHERE
A.COD_SOCIO_INT = CAST(@IDPADRE AS BIGINT)
FETCH NEXT FROM CUR_PADRE INTO @IDPADRE
END
CLOSE CUR_PADRE
DEALLOCATE CUR_PADRE
