Udostępnij przez


Kwerenda hierarchiczna tabeli za pomocą metody hierarchii

Teraz, HumanResources.EmployeeOrg tabela zostanie całkowicie wypełniony, to zadanie będzie pokazują, jak kwerendy hierarchii niektórych metod hierarchicznych.

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

  1. Sariya ma jeden pracownik podrzędnego.Dla Sariya jego podwładnych kwerendy wykonać następującej kwerendy korzystającej z IsDescendantOf metoda:

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

    Wynik list Sariya i Wanida.Sariya jest wyświetlane, ponieważ użytkownik elementów podrzędnych poziom 0.Wanida jest podrzędnym 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ż jeden poziom pod Sariya Wanida, użyj 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
    

    Czas ten wynik wyświetla tylko Wanida.

  3. Teraz zmienić @CurrentEmployee David (IDPracownika 6) i poziom 2.Wykonanie następujących czynności, aby również zwracać 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
    

    To czas, otrzymujesz Mary David również podwładnych, dwa poziomy niedziałający.

GetRoot i GetLevel

  1. Jak zwiększa się hierarchii jest trudniejszy do złamania, gdzie członkowie są w hierarchii.Użyj GetLevel jest metoda znajdowania, ile poziomów każdy wiersz niedziałający hierarchii.Wykonać następujący kod, aby wyświetlić poziomy wszystkie wiersze:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode.GetLevel() AS EmpLevel, *
    FROM HumanResources.EmployeeOrg ;
    GO
    
  2. Użyj GetRoot Metoda znajdowania węzła głównego w hierarchii.Poniższy kod zwraca pojedynczy wiersz, który jest katalogiem głównym:

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

Kolejnym zadaniem będzie reorganizować hierarchii.