Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   SQL Server (http://www.forosdelweb.com/f87/)
-   -   Recursivo (http://www.forosdelweb.com/f87/recursivo-581983/)

LUISESPOCH 01/05/2008 11:46

Recursivo
 
Hola amigos todos..
Alguien me puede ayudar orientandome como hago una funcion recursiva que traiga los valores de la siguiente estructura:


Aviones
|
!__ Avx
.......|
........|__AVXXX
........|..........|
........|..........|___amtx
........|..........|___amty
........|__AVYYY
...................|___amtx

IdActivo Activo IdActivoPadre Nivel
2_______Aviones___0___________1
10______AVX______2___________2
12______AVXXX____10__________3
13______AVYYY____10__________4
16______amtx_____12__________4
19______amty_____12__________4
20______bxy______13__________4


Me explico:
Actualmente tengo un SP que me barre un conjunto de registros tomando en el WHERE el IdActivo=@PI_IdActivo; este @PI_IdActivo es el valor que coje al hacer clic el usuario dentro del arbol.

Esto me funciona OK cuando la categoria que selecciona es la ultima porque la cojo directo, pero cuando coje una categoria padre NO ME FUNCIONA porque no hay registros para esa categoria sino para las hijas...
POR LO TANTO...
Me gustaría hacer un barrido de todos las ctagorias que son hijas de la categoria seleccionada por el usuario.


Le estará muy agradecido a la persona que me de una manito en esto..ya que yo lo he intentado pero hago lios..

Gracias amigos..
PD: Estoy con SQLServer2005

Luis

iislas 02/05/2008 11:33

Re: Recursivo
 
Revisa este link, tal vez encuentres la solucion:


http://msdn.microsoft.com/en-us/library/ms186243.aspx

flaviovich 02/05/2008 15:04

Re: Recursivo
 
No he probado este script, pero tu como el interesado lo haras:
Código:

CREATE FUNCTION dbo.sp_Seek4NestedRec
(
    @PI_IdActivoPadre INT
)
RETURNS TABLE
AS
DECLARE @TableVar TABLE(IdActivo INT, Activo VARCHAR(20), IdActivoPadre INT, Nivel INT)
IF EXISTS(SELECT 1 FROM Aviones WHERE IdActivoPadre = @PI_IdActivoPadre)
BEGIN
    SET @TableVar = dbo.sp_Seek4NestedRec(@PI_IdActivo)
END
RETURN SELECT * FROM Aviones WHERE IdActivoPadre = @PI_IdActivoPadre
    UNION @TableVar
--@@NESTLEVEL
GO
DECLARE @t_aviones TABLE(IdActivo INT, Activo VARCHAR(20), IdActivoPadre INT, Nivel INT)
SET @t_aviones = dbo.sp_Seek4NestedRec(@PI_IdActivo)
SELECT * FROM @t_aviones


iislas 02/05/2008 16:44

Re: Recursivo
 
flaviovich

No estoy en contra de tu funcion, solo que para 2005 me parece mejor utilizar CTE's ya que es algo mas nativo de esta version

Saludos

LUISESPOCH 05/05/2008 15:18

Re: Recursivo
 
Gracias a todos me hice una funcion en base a las ayudas de acá y si me esta funcionando. Gracias a todos los amigos del foro.


La zona horaria es GMT -6. Ahora son las 23:45.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.