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

Откуда:
Сообщений: 99
Уважаемые специалисты, дорогие ребята!
С поникшей головой к Вам обращаюсь, ибо в голове настал полный тупняк :(
Есть иерархическая таблица вида:
ID | TEXT | URL | PARENT_ID

Нужна функция вида GET_STRUCTURE_STRING, которая по входному параметру ID формировала бы таблицу вида:
ID | TEXT | URL | LEVEL, упорядоченная по возрастанию по LEVEL

Т.е. если представить каталоги операционной системы, то необходимо получить путь до текущего каталога.

Знаю про рекурсивную функцию в SQL, но мозг отключился, не могу сообразить...

Очень прошу не приводить сторонний пример, а просто написать готовую функцию согласно условиям.

Ребят. Встрял, выручайте.
9 дек 13, 17:39    [15266290]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
БКонстантин
Знаю про рекурсивную функцию в SQL, но мозг отключился, не могу сообразить...
Посмотрите в хелпе CTE, замените имена таблиц в примере на свои.
9 дек 13, 17:43    [15266316]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
хмхмхм
Guest
БКонстантин,

посмотрите в MSDN, там как раз пример был ваш к описанию CTE (common table expression), если я не ошибаюсь. Поищите
9 дек 13, 17:43    [15266324]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
БКонстантин
Member

Откуда:
Сообщений: 99
Ребят, спасибо, что быстро ответили.
Но я Вас дико прошу, приведите полный код функции с названием. Третие сутки не сплю, голова отключается. А сделать нужно сегодня.
9 дек 13, 17:47    [15266339]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
БКонстантин,

)))))
ссылка 1
ссылка 2
9 дек 13, 18:07    [15266498]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
BuKTaP
Member

Откуда:
Сообщений: 132
WITH cte (id, PARENT_ID, lev, link)
AS
(SELECT t.ID, t.PARENT_ID, 0, CAST(t.ID AS NVARCHAR(10))
 FROM t1 t
 WHERE t.PARENT_ID IS NULL
UNION ALL
SELECT t.ID, t.PARENT_ID, c.lev + 1, 
CAST((CAST(t.ID AS NVARCHAR(10)) + '->' + c.link) AS NVARCHAR(10))
  FROM t1 t
JOIN cte c ON c.ID = t.PARENT_ID)

SELECT
	c.id,
	c.PARENT_ID,
	c.lev,
	c.link
FROM
	cte c
10 дек 13, 15:23    [15272021]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить