SQL Server 2005 рекурсивный запрос с циклами в данных - возможно ли это?

У меня есть стандартная таблица начальника / подчиненного сотрудника. Мне нужно выбрать начальника (указывается по ID) и всех его подчиненных (и их подчиненных и т. Д.). К сожалению, в реальных данных есть некоторые петли (например, оба владельца компании назначают друг друга своим начальником). Простой рекурсивный запрос с CTE перекрывает его (максимальный уровень рекурсии превышен на 100). Можно ли по-прежнему выбирать сотрудников? Я забочусь не о порядке, в котором они выбраны, просто о том, что каждый из них выбирается один раз.

Added: Вы хотите мой запрос? Хм ... ОК ... Я, хотя это довольно очевидно, но - вот оно:

with
UserTbl as -- Selects an employee and his subordinates.
(
    select a.[User_ID], a.[Manager_ID] from [User] a WHERE [User_ID] = @UserID
    union all
    select a.[User_ID], a.[Manager_ID] from [User] a join UserTbl b on (a.[Manager_ID]=b.[User_ID])
)
select * from UserTbl

Added 2: О, на случай, если неясно - это производственная система, и мне нужно сделать небольшое обновление (в основном добавить своего рода отчет). Таким образом, я предпочел бы не изменять данные, если их можно избежать.

Ответы на вопрос(10)

Ваш ответ на вопрос