SQL Server - Como crear un script recursivo

 
Vista:

Como crear un script recursivo

Publicado por Visceras (3 intervenciones) el 14/09/2007 16:39:10
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.

PD: perdon por poner la consulta dos veces, pero es que en la primera se me fue la pinza en lo de "Titulo" :P
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:Como crear un script recursivo

Publicado por Luis Diego Arias (diegus) (1 intervención) el 16/05/2008 16:01:44
Esta es la forma en que yo llegue a una solución que creo que es la correcta, trate de hacerlo de la forma mas simple posible, y espero que sea lo que buscas.
El sistema gestor de Bases de Datos que use para hacerlo fue SQL Server 2003, para que consideres las diferencias entre las versiones de Sistemas Gestores de Bases de Datos

también te dejo un consejo de uno de los mas grandes genios de la historia
"Si buscas resultados distintos, no hagas siempre lo mismo". (Albert Einstein)

[ diegus ]
-----------------------------------------------------------------------------------------------------------
use master
go
if exists (select * from sysdatabases where name = 'ejemplo') begin
drop database ejemplo
end
go
create database ejemplo
go
use ejemplo
go

create table persona
(
idPersona int
,nombre varchar(50) not null
,tiempor DateTime
,idPadre int
,constraint PKPersona primary key (idPersona)
,constraint FK1Persona foreign key (idPadre) references persona(idPersona)
)
go

insert into persona (idPersona, nombre, idPadre) values (1,'el abuelo',null)
insert into persona (idPersona, nombre, idPadre) values (2,'el padre',1)
insert into persona (idPersona, nombre, idPadre) values (3,'el hijo',2)
insert into persona (idPersona, nombre, idPadre) values (4,'el nieto',3)
insert into persona (idPersona, nombre, idPadre) values (5,'el tataranieto',4)
insert into persona (idPersona, nombre, idPadre) values (6,'el amigo sin relacion',null)
insert into persona (idPersona, nombre, idPadre) values (7,'la vecina del amigo',null)

go

if exists (select * from sysobjects where name = 'getHijo') begin
drop procedure getHijo
end
go
create procedure getHijo
(
@idPadre int
,@salida varchar(5000)
) as
begin
declare @temp varchar(50)
declare @nextId int
select
@temp = p2.nombre
,@nextId = p2.idPersona
from
persona as p1
,persona as p2
where
p1.idPersona = p2.idPadre
and p1.idPersona = @idPadre
if ( @temp is null) begin
select @salida as familia
end else begin
set @salida = @salida + ' / ' + @temp
execute getHijo @nextId, @salida
end
end
go

getHijo 2,''
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