我有一个典型的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的排序作为解决方案的一部分。大约有120万行。数据是大量高度为1-5的独立树。其目的是清除数据以消除循环,然后向表中添加触发器以防止将来出现循环。
我知道
the
algorithms
用于循环检测。在我看来,这应该是一个常见的问题。所以,我想知道在SQL Server的“box”中是否有一种简便的方法可以用最少的代码来完成这个任务。