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 'に便利な方法があるのだろうかと思っていた。