У меня есть типичная таблица иерархических данных в форме 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'
Идентификаторы из другой таблицы, поэтому я не могу использовать порядок идентификаторов как часть решения. Есть около 1/2 миллиона строк. Данные представляют собой большое количество независимых деревьев высотой 1-5. Цель состоит в том, чтобы очистить данные, чтобы устранить циклы, а затем добавить триггер в таблицу для предотвращения циклов в будущем.
Я знаю thealgorithms для обнаружения циклов. Мне кажется, что это должна быть общая проблема. Итак, мне было интересно, есть ли удобный способ в поле «SQL Server» для выполнения этого с минимальным кодом.