Тип данных иерархии на сервере sql имеет дубликат
У меня есть следующая таблица
ChildID ParentID
1 0
1 2
4 3
1 4
2 6
4 8
в качестве основы для отношений ребенка с родителем
Выполнение запроса:
CREATE TABLE #Org (
OrgNode [hierarchyid],
ChildID int,
ParentID int
CONSTRAINT PK_OrgNode PRIMARY KEY CLUSTERED (OrgNode));
CREATE TABLE #Child (
ChildID int,
ParentID int,
Num int);
CREATE CLUSTERED INDEX tmpind ON #Child(ParentID, ChildID);
INSERT INTO #Child
SELECT DISTINCT
ChildID = ChildID,
ParentID = ParentID,
Num = ROW_NUMBER() OVER (PARTITION BY ParentID ORDER BY ParentID)
FROM #tmpEntity;
Результат, как и ожидалось:
ChildID ParentID Num
1 0 1
1 2 1
4 3 1
1 4 1
2 6 1
4 8 1
при выполнении следующего шага
WITH paths(path, ChildID)
AS
(SELECT hierarchyid::GetRoot() AS OrgNode, ChildID
FROM #Child AS C
WHERE ParentID = 0
UNION ALL
SELECT CAST(p.path.ToString() + CAST(C.Num AS varchar(30)) + '/' AS hierarchyid), C.ChildID
FROM #Child AS C
JOIN paths AS p ON C.ParentID = P.ChildID)
INSERT #Org (OrgNode, O.ChildID, O.ParentID)
SELECT P.path, O.ChildID, O.ParentID
FROM #tmpEntity AS O
JOIN Paths AS P ON O.ChildID = P.ChildID
OPTION (maxrecursion 0)
GO
теперь выдает ошибку
"Сообщение 2627, Уровень 14, Состояние 1, Строка 170 Нарушение ПЕРВИЧНОГО КЛЮЧА"
ограничение 'PK_OrgNode'. Невозможно вставить дубликат ключа в объект
"ДБО. # Org. Дубликат значения ключа (0x). Заявление было
прекращается. "
Может кто-нибудь помочь или посмотреть, где ошибка?
Спасибо