21/01/2008, 13:06
|
| Colaborador | | Fecha de Ingreso: julio-2007 Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses Puntos: 180 | |
Re: Consulta a Tabla Eso se llama RECURSIVIDAD, y puedes hacerlo de esta forma, te pongo un ejemplo:
-- RECURSIVIDAD
create table tempo ( idclave int, descripcion char(10),
idpadre int )
go
insert into tempo values ( 1, 'AAA', 0 )
insert into tempo values ( 2, 'AAA', 1 )
insert into tempo values ( 3, 'AAA', 1 )
insert into tempo values ( 4, 'AAA', 2 )
insert into tempo values ( 5, 'AAA', 2 )
insert into tempo values ( 6, 'AAA', 4 )
go
create table tempodes ( iddes int, nivel int )
go
2) Grabamos en la tabla tempodes los descendientes del
parámetro solicitado (en eset caso lo pongo en una
variable):
declare @param int
SET @param = 1
declare @nivel int
DELETE FROM tempodes
INSERT INTO tempodes SELECT idclave, 1 FROM tempo WHERE
idpadre = @param
SET @nivel = 2
WHILE ( EXISTS ( SELECT iddes FROM tempodes WHERE nivel =
@nivel - 1 ) )
BEGIN
INSERT INTO tempodes SELECT idclave, @nivel FROM tempo
WHERE idpadre IN ( SELECT iddes FROM tempodes WHERE nivel
= @nivel - 1 )
SET @nivel = @nivel + 1
END
3) Si vemos el detalle de la tabla con SELECT * FROM tempodes, tenemos :
iddes nivel
----------- -----------
2 1
3 1
4 2
5 2
6 3
4) Si deseamos que todo se encuentre en una cadena :
declare @cadena varchar(1000)
SET @cadena = ''
select @cadena = @cadena + convert(varchar,iddes) + ';'
from tempodes
select @cadena
tenemos :
----------
2;3;4;5;6; |