SoloCodigo

Bases de Datos => SQL Server => Mensaje iniciado por: EEC en Viernes 31 de Julio de 2009, 15:25

Título: Consulta Recursiva
Publicado por: EEC en Viernes 31 de Julio de 2009, 15:25
Alguien puede ayudarme a hacer la consulta recursiva de la tabla Dispositivos que cuenta con Id_Dispositivo, DescripcionDispositivo, ComponenteDispositivo.
El tema es que ComponenteDispositivo es otro dispositivo que tiene Dispositivo, osea por eso es recursivo
Y debe mostrar en forma de arbol.....
Me ayudan porfa!!!!
Gracias
Título: Re: Consulta Recursiva
Publicado por: LordKanabis en Viernes 7 de Agosto de 2009, 17:51
Si pudieras ser algo más explícito de como es la tabla y la forma del resultado te pudieramos ayudar.  :D

Saludos.
Título: Re: Consulta Recursiva
Publicado por: ElNapster en Viernes 21 de Agosto de 2009, 18:42
Todo eso lo podrias meter a un SP y utilizar cursores que se se encarguen de realizar lo que tu buscas.
 :comp:
Título: Re: Consulta Recursiva
Publicado por: Shiquilla en Jueves 10 de Septiembre de 2009, 17:37
Lo podrías lograr partiendo con una tabla de apoyo donde vayas insertando y marcando los datos que tienes.

Supongamos que dicha tabla tiene el ID del registro y un campo bTrabajo de tipo BIT (Cuando = 1 entonces ya se han insertado sus hijos)
 
Por ejemplo (Suponiendo que la tabla real se llama TABLADATOS):

Código: SQL
  1. DECLARE @Apoyo TABLE (idRegistro INT NOT NULL PRIMARY KEY, bTratado NOT NULL DEFAULT 0, bNuevo  NOT NULL DEFAULT 1)
  2. INSERT INTO @Apoyo (idRegistro) VALUES (1) -- Aquí habría que hacer la primera INSERT (el/los padres de todos los demás)
  3. WHILE EXISTS (SELECT TOP 1 1 FROM @Apoyo WHERE bTratado = 0 AND bNuevo = 1)
  4. BEGIN
  5.     UPDATE @Apoyo SET bNuevo = 0 WHERE bTratado = 0
  6.     INSERT INTO @Apoyo (idRegistro) SELECT idRegistro FROM TablaDatos A INNER JOIN @Apoyo B ON A.idSiguienteComponente = B.idRegistro WHERE B.bTratado = 0 AND B.bNuevo = 0
  7.     UPDATE @Apoyo SET bTratado = 1 WHERE bNuevo  = 0
  8. END
  9.  

Ya he hecho cosas de este estilo y este método va muy bien ya que puedes tener niveles infinitos, espero haberme explicado bien.

Saludos,