Abfragen einer hierarchischen Tabelle mit hierarchischen Methoden

Nachdem die Tabelle HumanResources.EmployeeOrg nun vollständig gefüllt ist, zeigt Ihnen diese Aufgabe, wie Sie die Hierarchie mithilfe einiger der hierarchischen Methoden abfragen können.

So suchen Sie untergeordnete Knoten

  1. Sariya ist ein Mitarbeiter unterstellt. Um den unterstellten Mitarbeiter abzufragen, führen Sie die folgende Abfrage aus, die die IsDescendantOf-Methode verwendet:

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

    Das Ergebnis listet sowohl Sariya als auch Wanida auf. Sariya wird aufgelistet, weil sie Nachfolger auf Ebene 0 ist. Wanida ist Nachfolger auf Ebene 1.

  2. Diese Informationen können Sie auch mit der GetAncestor-Methode abfragen. GetAncestor übernimmt ein Argument für die Ebene, für die Informationen zurückgegeben werden sollen. Da Wanida eine Ebene unter Sariya angesiedelt ist, können Sie GetAncestor(1) verwenden, wie der folgende Code veranschaulicht:

    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
    

    Dieses Mal listet das Ergebnis nur Wanida auf.

  3. Ändern Sie jetzt @CurrentEmployee in David (EmployeeID 6) und die Ebene in 2. Führen Sie folgenden Code aus, um auch Wanida zurückzugeben:

    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
    

    Dieses Mal erhalten Sie auch Mary, die, zwei Ebenen darunter, ebenfalls David unterstellt ist.

So verwenden Sie 'GetRoot' und 'GetLevel'

  1. Mit dem Anwachsen der Hierarchie wird es schwieriger zu ermitteln, wo innerhalb der Hierarchie sich die Elemente befinden. Verwenden Sie die GetLevel-Methode, um zu ermitteln, auf welcher Ebene der Hierarchie sich eine Zeile befindet. Führen Sie den folgenden Code aus, um die Ebenen aller Zeilen anzuzeigen:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode.GetLevel() AS EmpLevel, *
    FROM HumanResources.EmployeeOrg ;
    GO
    
  2. Verwenden Sie die GetRoot-Methode, um den Stammknoten in der Hierarchie zu ermitteln. Im folgenden Code wird die einzelne Zeile, die der Stamm ist, zurückgegeben:

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

In der nächsten Aufgabe wird die Hierarchie neu organisiert.