3

계층 구조를 관리하는 데 도움이되는 클로저 테이블을 구현하려면 Bill Karwin's presentation을 참조합니다. 아쉽게도 프레젠테이션에 슬라이드 67에 언급 된 Level 열을 삽입/업데이트 할 수있는 방법이 나와 있지 않습니다. 이것은 매우 유용했을 것입니다. 나는 그것을 생각해 봤지만 나는 시험 할 수있는 구체적인 것을 생각해 낼 수 없었다. 여기에 내가 지금까지 가지고있는 것이있다 :클로저 테이블 레벨/거리 열을 포함한 INSERT 문

create procedure USP_OrganizationUnitHierarchy_AddChild 
    @ParentId UNIQUEIDENTIFIER, 
    @NewChildId UNIQUEIDENTIFIER 
AS 
BEGIN 
    INSERT INTO [OrganizationUnitHierarchy] 
    (
     [AncestorId], 
     [DescendantId], 
     [Level] 
    ) 
    SELECT [AncestorId], @NewChildId, (here I need to get the count of ancestors that lead to the currently being selected ancestor through-out the tree) 
    FROM [OrganizationUnitHierarchy] 
    WHERE [DescendantId] = @ParentId 
    UNION ALL SELECT @NewChildId, @NewChildId 
END 
go 

나는 그것을 어떻게 할 수 있을지 잘 모르겠다. 어떤 아이디어?

답변

4

당신은 부모 = 자기 여러분이 조상에서 경로를 복사 할 때 레벨 = 0, 당신은 단지 1 레벨이 증가하고있는 것을 알고있다 : 진심

create procedure USP_OrganizationUnitHierarchy_AddChild 
    @ParentId UNIQUEIDENTIFIER, 
    @NewChildId UNIQUEIDENTIFIER 
AS 
BEGIN 
    INSERT INTO [OrganizationUnitHierarchy] 
    (
     [AncestorId], 
     [DescendantId], 
     [Level] 
    ) 
    SELECT [AncestorId], @NewChildId, [Level] + 1 
    FROM [OrganizationUnitHierarchy] 
    WHERE [DescendantId] = @ParentId 
    UNION ALL 
    SELECT @NewChildId, @NewChildId, 0 
END 
+0

! 그렇게 간단하니? 나는 지금 바보 같은 느낌이 든다. 도움을 주셔서 감사합니다. 많이 감사합니다. :) – Kassem

+0

직장에서 나무를 위해이 모델을 사용하고 있습니다. 그래서 나에게 익숙해 지기도하고, 때로는 단순한 것을 처음에는 이해하기가 어렵습니다. –