Rekursive SQL Server 2005-Abfrage mit Datenschleifen - ist das möglich?

Ich habe eine Standardtabelle für Chefs / untergeordnete Angestellte. Ich muss einen Chef (angegeben durch ID) und alle seine Untergebenen (und ihre Untergebenen usw.) auswählen. Leider sind in den Daten der realen Welt einige Schleifen enthalten (z. B. haben sich beide Firmeninhaber gegenseitig als Chef festgelegt). Die einfache rekursive Abfrage mit einem CTE drosselt dies (maximale Rekursionsstufe von 100 überschritten). Können die Mitarbeiter noch ausgewählt werden? Mir ist es egal, in welcher Reihenfolge sie ausgewählt werden, nur dass jede von ihnen einmal ausgewählt wird.

Hinzugefügt: Sie möchten meine Anfrage? Ähm ... OK ... ich denke es ist ziemlich offensichtlich, aber - hier ist es:

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

Hinzugefügt 2: Oh, falls es nicht klar war - dies ist ein Produktionssystem und ich muss ein kleines Upgrade durchführen (im Grunde eine Art Bericht hinzufügen). Daher würde ich es vorziehen, die Daten nicht zu ändern, wenn dies vermieden werden kann.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage