Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
toluolus
Member

Откуда:
Сообщений: 5
Есть таблица содержащая список папок со структурой [ID],[Name],[ParentID]
Мне необходимо иметь возможность поучать для произвольного элемента folderX полный путь до корневой папки в виде
\folder1\folder2\folderX

Поиск в гугле и по форуму оказался безуспешным. Нашел лишь упоминание о функции SELECT SYS_CONNECT_BY_PATH в Оракле, а как подобное реализовать в MSSQL - не нашел

Возможно где-то подобное обсуждалось, если да - помогите найти!
Заранее благодарен.
17 мар 13, 13:04    [14058956]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
http://msdn.microsoft.com/ru-ru/library/ms186243%28v=sql.105%29.aspx
17 мар 13, 13:12    [14058971]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
toluolus
Member

Откуда:
Сообщений: 5
Ссылка бесспорно познавательная, но ответа на свой вопрос там я не нашел.. Будьте любезны прокомментировать
17 мар 13, 14:59    [14059199]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
toluolus
Ссылка бесспорно познавательная, но ответа на свой вопрос там я не нашел
А это потому что не захотели примеры разобрать и понять.
declare @t table (ID int, ParentID int, Name varchar(10));
declare @ID int = 3;

insert into @t
values
 (1, null, 'Root'),
 (2, 1, 'Level1'),
 (3, 2, 'Level2');
 
with x as
(
 select
  ParentID,
  cast(Name as varchar(max)) as [Path]
 from
  @t
 where
  ID = @ID
 
 union all
 
 select
  t.ParentID,
  t.Name + '\' + x.[Path]
 from
  x join
  @t t on t.ID = x.ParentID
)
select
 [Path] 
from
 x
where
 ParentID is null;
17 мар 13, 15:12    [14059225]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
toluolus
Member

Откуда:
Сообщений: 5
Большое спасибо!
Ваш ответ помог мне разобраться.
17 мар 13, 16:09    [14059391]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсия (возможно) помогите написать запрос, пожалуйста  [new]
Exproment
Member

Откуда:
Сообщений: 416
toluolus, я бы на вашем месте подумал о внедрении hierarchyid вместо parentid он как раз и расчитвн на подобного рода задачи
17 мар 13, 22:08    [14060158]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить