Aracılığıyla paylaş


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

  1. 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.

  2. 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.

  3. Ş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

  1. 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
    
  2. 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