recursion-get последовательность родительских папок в .Net с использованием рекурсии - PullRequest
2 голосов
/ 19 октября 2011

У меня есть таблица со следующей структурой

    ID          Name                                               Parent
----------- -------------------------------------------------- -----------
1           Root                                               NULL
2           Root_A                                             1
3           Root_B                                             1
4           Root_C                                             1
5           Root_C_A                                           4
6           Root_C_A_A                                         5
7           Root_C_A_A_A                                       6

Так что, если я передам 7, я бы хотел получить следующее

Root --> Root_C --> Root_C_A --> Root_C_A_A

Это означает, что я хочу пройтивернуться к корню от ребенка.Как я могу сделать это, используя хранимые процедуры SQL Server 2008 или другие методы .Net?

Я думаю, что смогу выполнить задачу, используя recursive function

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Вы можете реализовать рекурсию в Sql Server 2005+, используя общее табличное выражение. CTE позволяют вам присоединиться к себе, чтобы пройти курс. CTE продолжает выполнять рекурсию до тех пор, пока строки не будут возвращены, поэтому вам нужно убедиться, что вы надежно выполняете это условие конца.

declare @folders as table (id int, name nvarchar(20), parent int);
insert into @folders values(1, 'Root',  null);
insert into @folders values(2, 'Root_A', 1);
insert into @folders values(3, 'Root_B', 1);
insert into @folders values(4, 'Root_C', 1);
insert into @folders values(5, 'Root_C_A', 4);
insert into @folders values(6, 'Root_C_A_A', 5);
insert into @folders values(7, 'Root_C_A_A_A', 6);

declare @folderID int;
set @folderID=7;

with Folders (id, name, parent, number) as
(
    select ID, name, parent, 0 as number 
        from @folders 
        where id=@folderID
    union all
    select i.ID, i.Name, i.Parent, d.number + 1
        from @folders as i
        inner join Folders as d on d.Parent = i.ID
)
select id, name, number
from Folders
order by number desc;
0 голосов
/ 19 октября 2011

попробуйте это:

declare @result varchar(100)
declare @id int
set @id = 7
select @result=Name,@id=Parent from temp where id=@id
while(exists(select 1 from temp where id=@id))
begin
    select @id=Parent,@result=case @result when '' then Name else Name + '-->' end + @result from temp where id=@id
end
select @result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...