Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/12/2009, 10:00
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Respuesta: Proc.Almacenado con recursividad, cursores...

puedes intentar con inner joins en lugar de producto cartesiando...a excepcion de la tabla fproest que no le hallo relacion directa con las otras 2... por eso la inclui con un cross join..

Adicional, el tener indices en los campos que hacen los joins seria muy bueno para el performance...

espero te sea de utilidad..

Código:
WITH prueba(padre,hijo) AS 
(
SELECT     c.padre,
           c.hijo
FROM       faprcpe a
INNER JOIN faprlpe b 
ON         a.cp020 = @idProv   AND
           a.cp000 = 1         AND
           a.cp050>'16/12/08'  AND
           b.lp000 = 1  
           a.cp010 = b.lp010
CROSS JOIN fproest c 
WHERE      c.es999 = 1 and 
           c.padre = @cod
GROUP BY   c.padre,
           c.hijo 
UNION ALL
SELECT     c.padre, 
           c.hijo
FROM       faprcpe a
INNER JOIN faprlpe b
ON         a.cp020 = @idProv     AND
           a.cp000 = 1           AND 
           a.cp050 > '16/12/08'  AND
           b.lp000 = 1           AND
           a.cp010 = b.lp010
CROSS JOIN fproest c
INNER JOIN prueba d
           d.hijo  = c.padre
WHERE      c.es999 = 1
GROUP BY   c.padre,
           c.hijo
)

SELECT     padre,
           hijo 
FROM       prueba
ORDER BY   padre,
           hijo
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.