2009-03-20 11 views
1

Ich habe eine typische Tabelle von hierarchischen Daten in ID, parentId-Formular.SQL Server 2005: Erkennen von Zyklen in hierarchischen Daten

CREATE TABLE Hierarchy (Id int, ParentId int NULL, Name varchar(128)); 
INSERT INTO Hierarchy VALUES (1, NULL, '1'); 
INSERT INTO Hierarchy VALUES (2, NULL, '2'); 
INSERT INTO Hierarchy VALUES (3, NULL, '3'); 
INSERT INTO Hierarchy VALUES (4, 1, '1.1'); 
INSERT INTO Hierarchy VALUES (5, 1, '1.2'); 
INSERT INTO Hierarchy VALUES (6, 4, '1.1.1'); 

Ich muss Zyklen wie unten in den vorhandenen Daten erkennen.

Id ParentId Name 
27 8   'foo' 
8 19  'bar' 
19 27  'busted' 

Die Ids sind aus einer anderen Tabelle, damit ich nicht Ordnung des Ids als Teil der Lösung nutzen kann. Es gibt ungefähr 1/2 Million Reihen. Die Daten sind eine große Anzahl von unabhängigen Bäumen der Höhe 1-5. Die Absicht ist, die Daten zu bereinigen, um die Zyklen zu beseitigen, und dann einen Trigger zu der Tabelle hinzuzufügen, um Zyklen in der Zukunft zu verhindern.

Ich kenne thealgorithms für Zykluserkennung. Es scheint mir, als sollte es ein allgemeines Problem sein. Also habe ich mich gefragt, ob es einen praktischen Weg in der SQL Server-Box gibt, um dies mit einem Minimum an Code zu erreichen.

Antwort