2009-03-20 15 views
1

id、parentId形式の階層データの典型的なテーブルがあります。SQL Server 2005:階層データのサイクルを検出する

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'); 

私は、既存のデータで以下のようなサイクルを検出する必要があります。

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

Idsは別のテーブルのものなので、ソリューションの一部としてIDの順序付けを使用することはできません。約1/2Mの行があります。データは、高さ1〜5の多数の独立した樹木である。その目的は、サイクルを排除するためにデータをクリーンアップし、将来サイクルを防止するためにトリガーをテーブルに追加することです。

私はサイクル検出のためにthealgorithmsを知っています。私はそれが共通の問題でなければならないように思えます。だから、最小限のコードでこれを達成するためにSQL Serverの `box 'に便利な方法があるのだろうかと思っていた。

答えて

関連する問題