У меня есть рекурсивная таблица, в которой каждая запись имеет идентификатор и PARENTID. PARENTID указывает на другой идентификатор в той же таблице. Есть ли способ в SQL Server выбрать полное «дерево» в одном выражении? Я мог бы написать рекурсивную функцию для перехода от родителя ко всем дочерним элементам, но мне хотелось бы сделать это в одном запросе.В SQL Server, как я могу выбрать все записи в рекурсивной таблице?
В Oracle, это будет выглядеть следующим образом:
select
id,
parentid,
nodename
from
MY_SCHEMA.MY_TABLE
connect by nocycle prior parentid = id
start with id = :starting_id_number
order by
id
Что бы эквивалент SQL Server?
Это работало для меня, но я должен сказать, что это довольно тупой способ сделать такого рода вещи. – JosephStyons
@JosephStyons: взгляните на Редактировать сообщение, чтобы узнать подробности об альтернативном подходе с использованием SQL Server 2008 –
@ Джон Сансом: Абсолютно неправильно, это абсолютно не эквивалентно, вы пропустили ключевое слово nocycle. Ваш вариант взорвется, как только появится циклическая ссылка. AFAIK, ноцикл в SQL-сервере невозможен ... –