SQL Server - Una cosulta recursiva

 
Vista:

Una cosulta recursiva

Publicado por Dani (13 intervenciones) el 18/12/2004 17:01:09
Hola a todos. A ver si logro explicarlo. Tengo una tabla en la que un registro puede hacer referencia a otro de la misma tabla y este a su vez a otro y asi...Los campos sin
Id-Descripción-idRef
1-uno-2
2-Dos-3
3-Tres-4
4-Cuatro......
Lo que yo necesito es una consulta que partiendo de un id concreto me devuelva toda la cadena.ç
Por ejemplo para el id=2, me devolviese el 3, y por lo tanto el 4.
No se si se entiende, pero creo que tiene que ver con la recursividad.
Bueno saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Una cosulta recursiva

Publicado por Marta (1 intervención) el 25/01/2005 13:13:46
Tengo la misma duda..., ¿lograste sacarlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Una cosulta recursiva

Publicado por omar (1 intervención) el 26/01/2005 17:00:12
Puedes declarar un cursor local e irlo recorriendo, pero 100pre intenta sacarlo con consultas ya que el cursor debe ser la ultima opcion saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursiva CHECATE ESTO

Publicado por Victor //:-) (12 intervenciones) el 18/04/2005 22:26:37
En los libros en pantalla de SQL busca en "Accesos y cambios a datos relacionales" busca "EXPANDIR REDES".
CREATE PROCEDURE route
(@current char(20), @dest char(20), @maxlevel int = 5) AS
SET NOCOUNT ON
DECLARE @level int
CREATE TABLE #stack (city char(20), level int)
CREATE TABLE #list (city char(20), level int)
INSERT #stack VALUES (@current, 1)
SELECT @level = 1

WHILE @level > 0
BEGIN
IF EXISTS (SELECT * FROM #stack WHERE level = @level)
BEGIN
SELECT @current = city
FROM #stack
WHERE level = @level
DELETE FROM #stack
WHERE level = @level
AND city = @current
DELETE FROM #list
WHERE level >= @level
IF EXISTS (SELECT * FROM #list WHERE city = @current)
CONTINUE
INSERT #list VALUES(@current, @level)
IF(@current = @dest)
BEGIN
SELECT city AS itinerary
FROM #list
CONTINUE
END

INSERT #stack
SELECT destination, @level + 1
FROM flights
WHERE departure = @current
AND @level < @maxlevel
IF @@rowcount > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END -- WHILE

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar