ID、parentId 形式の階層データの典型的なテーブルがあります。
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'
Id は別のテーブルからのものであるため、ソリューションの一部として Id の順序付けを使用することはできません。約 1/2 百万行あります。データは、高さ 1 ~ 5 の多数の独立したツリーです。その意図は、データをクリーンアップしてサイクルを排除し、トリガーをテーブルに追加して将来のサイクルを防ぐことです。
サイクル検出の アルゴリズムを知っています。それは一般的な問題であるべきだと私には思えます。そこで、最小限のコードでこれを実現する便利な方法が SQL Server の「ボックス」にあるのではないかと考えていました。