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
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.
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) = @CurrentEmployeeCzas ten wynik wyświetla tylko Wanida.
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) = @CurrentEmployeeTo czas, otrzymujesz Mary David również podwładnych, dwa poziomy niedziałający.
GetRoot i GetLevel
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 ; GOUż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.