我有一个典型的 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 的“盒子”中是否有一种方便的方法可以用最少的代码完成这个任务。