Udostępnij za pośrednictwem


Querying a Hierarchical Table Using Hierarchy Methods

Teraz, gdy w tabela HumanResources.EmployeeOrg zostanie całkowicie wypełniony, to zadanie będzie wskazywać sposoby kwerendy za pomocą niektórych metod hierarchiczne hierarchii.

Aby znaleźć węzły podrzędne

  1. Sariya ma jeden pracownik podrzędnego.Dla firmy Sariya podwładnych kwerendy wykonać następujące kwerendy, która używa IsDescendantOf metoda:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 46 ;
    
    SELECT *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.IsDescendantOf(@CurrentEmployee) = 1 ;
    

    Wynik wyświetla zarówno Sariya i Wanida.Sariya jest wyświetlany, ponieważ jest ona obiektu podrzędnego poziom 0.Wanida jest obiektu podrzędnego poziom 1.

  2. You can also query for this information by using the GetAncestor method.GetAncestor takes an argument for the level that you are trying to return.Ponieważ Wanida jest jeden poziom poniżej Sariya, za pomocą GetAncestor(1) jak pokazano w poniższym kodzie:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 46 ;
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.GetAncestor(1) = @CurrentEmployee
    

    To czas wynik wyświetla tylko Wanida.

  3. Teraz zmienić @CurrentEmployee David (IDPracownika 6) i poziom 2. Wykonaj następujące czynności, aby zwracają również Wanida:

    DECLARE @CurrentEmployee hierarchyid
    
    SELECT @CurrentEmployee = OrgNode
    FROM HumanResources.EmployeeOrg
    WHERE EmployeeID = 6 ;
    
    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode.GetAncestor(2) = @CurrentEmployee
    

    Tym razem także otrzymywać Mary, który również podlega David dwa poziomy niedziałający.

Aby użyć GetRoot i GetLevel

  1. Jak zwiększa się hierarchii jest trudniejszy do ustalenia, których członkami są w hierarchii.Użycie GetLevel metoda, aby znaleźć liczbę poziomów w każdym wierszu znajduje się w hierarchii.Należy wykonać poniższy kod, aby wyświetlić poziomy wszystkie wiersze:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode.GetLevel() AS EmpLevel, *
    FROM HumanResources.EmployeeOrg ;
    GO
    
  2. Użycie GetRoot metoda, aby znaleźć węzła głównego w hierarchii.W poniższym kodzie zwróci jeden wiersz, który jest katalogiem głównym:

    SELECT OrgNode.ToString() AS Text_OrgNode, *
    FROM HumanResources.EmployeeOrg
    WHERE OrgNode = hierarchyid::GetRoot() ;
    GO
    

Następnego zadania spowoduje zmianę hierarchii.