Hiyerarşi yöntemleri kullanarak hiyerarşik bir tablo sorgulama
Şimdi bu HumanResources.EmployeeOrgtablo tam olarak doldurulur, bu görev hiyerarşi bazı hiyerarşik yöntemler kullanarak sorgu nasıl göstereceğim.
Alt düğümlerin bulmak için
Sariya bir bağımlı çalışan vardır. Sariya'nın astları için sorgulamak için kullandığı aşağıdaki sorguyu yürütün IsDescendantOf yöntemi:
DECLARE @CurrentEmployee hierarchyid SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 46 ; SELECT * FROM HumanResources.EmployeeOrg WHERE OrgNode.IsDescendantOf(@CurrentEmployee ) = 1 ; DECLARE @CurrentEmployee hierarchyid SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 46 ; SELECT * FROM HumanResources.EmployeeOrg WHERE OrgNode.IsDescendantOf(@CurrentEmployee ) = 1 ;
Sariya ve Wanida sonucu listeler. Çünkü o 0 düzeyinde alt Sariya listelenir. Wanida 1 düzeyinde soyundan olduğunu.
Bu bilgileri kullanarak da sorgulayabilirsiniz GetAncestor yöntemi. GetAncestorİade etmeye çalıştığınız düzeyi için bir bağımsız değişken alır. Wanida Sariya altında bir düzey olduğundan, kullanmak GetAncestor(1)Aşağıdaki kodda gösterildiği gibi:
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 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
Bu kez yalnızca Wanida sonucu listeler.
Şimdi değiştirmek @CurrentEmployeeDavid (ÇalışanNo 6) ve düzey 2. Ayrıca Wanida dönmek için aşağıdaki yürütün:
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 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
Bu kez de de aşağı David, iki düzeyde raporlar Mary alırsınız.
GetRoot ve GetLevel kullanmak için
Hiyerarşi daha büyük büyüdükçe üyeleri hiyerarşisindeki yeri belirlemek daha zordur. Kullanım GetLevel kaç düzeyleri her satır aşağı bulmak için yöntemdir hiyerarşi içinde. Tüm satırları düzeylerini görüntülemek için aşağıdaki kod yürütün:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode.GetLevel() AS EmpLevel, * FROM HumanResources.EmployeeOrg ; GO SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode.GetLevel() AS EmpLevel, * FROM HumanResources.EmployeeOrg ; GO
Kullanım GetRoot hiyerarşisinde kök düğüm bulunmasını sağlayan yöntem. Aşağıdaki kod, kök tek bir satır döndürür:
SELECT OrgNode.ToString() AS Text_OrgNode, * FROM HumanResources.EmployeeOrg WHERE OrgNode = hierarchyid::GetRoot() ; GO SELECT OrgNode.ToString() AS Text_OrgNode, * FROM HumanResources.EmployeeOrg WHERE OrgNode = hierarchyid::GetRoot() ; GO
Sonraki görev hiyerarşi yeniden organize.
Ders sonraki görev
Verileri Hiyerarşik yöntemleri kullanarak hiyerarşik bir tablo içinde yeniden sıralama