SQL Server - programador

   
Vista:

programador

Publicado por Visceras (3 intervenciones) el 14/09/2007 16:36:51
Hola a todos:

Hace poco que he empezado con SQL Server y como es normal salen problemas por todos lados. Vereis tengo que crear un script recursivo que busque dentro de una especifica tabla, por ejemplo:

tbl_procesos

* id
* nombre
* tiempo
* pid (id del padre)

La cuestion es que dado un id tengo que sacar todos sus "hijos", los hijos de los hijos, y asi sucesivamente hasta llegar al final del arbol. Hasta ahora he estado haciendo todo el trabajo a "mano" pero lleva demasiado tiempo.

¿Puede alguien ayudarme en esto? Gracias por adelantado.
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:programador

Publicado por Isaias (3308 intervenciones) el 14/09/2007 18:11:03
¿SQL Server 2000?

Ve este ejemplo, que tiene como limitante el varchar(8000)

create function dbo.nombres (
@id int
)
returns varchar(8000)
as
begin
declare @s varchar(8000)
declare @i int

set @s = ''
set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
select @i = IdPadre, @s = nombre + case when @s = '' then '' else ' / ' end + @s
from dbo.t1
where [id] = @i
end

return @s
end
go

create function dbo.ids (
@id int
)
returns @t table ([id] int)
as
begin
declare @i int

set @i = @id

while exists(select * from dbo.t1 where [id] = @i)
begin
insert into @t values(@i)

select @i = IdPadre
from dbo.t1
where [id] = @i
end

return
end
go

create table dbo.t1 (
[id] int,
IdPadre int,
nombre varchar(25),
)
go

insert into dbo.t1 values(1, 0, 'AAA')
insert into dbo.t1 values(2, 0, 'BBB')
insert into dbo.t1 values(3, 1, 'AAA 1')
insert into dbo.t1 values(4, 1, 'AAA 2')
insert into dbo.t1 values(5, 3, 'AAA 1.1')
insert into dbo.t1 values(6, 3, 'AAA 1.2')
insert into dbo.t1 values(7, 6, 'AAA 1.2.1')
go

select [id], IdPadre, nombre, dbo.nombres([id]) as nombres
from dbo.t1
where [id] in (select [id] from dbo.ids(5))
order by [id]
go

drop table dbo.t1
go

drop function dbo.nombres, dbo.ids
go
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:programador

Publicado por Visceras (3 intervenciones) el 14/09/2007 19:26:30
gracias por la ayuda
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:programador

Publicado por Isaias (3308 intervenciones) el 15/09/2007 02:06:21
De nada compañero, espero sirva para tus propositos.
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