Нарушение ограничения PRIMARY KEY 'PK_OrgNode'. Невозможно вставить дубликат ключа в объект 'dbo. # Org'. Дубликат значения ключа (0x) - PullRequest
1 голос
/ 16 мая 2019

Тип данных иерархии на сервере 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). Заявление было прекращается. "

Может кто-нибудь помочь или посмотреть, где ошибка? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...