Вы можете реализовать рекурсию в 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;