Condividi tramite


Esecuzione di query su una tabella gerarchica utilizzando metodi gerarchici

Ora che la tabella HumanResources.EmployeeOrg è completamente popolata, in questa attività verrà illustrato come eseguire una query sulla gerarchia utilizzando alcuni dei metodi gerarchici.

Per trovare nodi subordinati

  1. Sariya ha un dipendente subordinato. Per eseguire una query per i subalterni di Sariya, eseguire la query seguente che utilizza il metodo IsDescendant:

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

    I risultati indicano sia Sariya sia Wanida. Sariya viene indicata perché rappresenta l'elemento discendente al livello 0. Wanida rappresenta l'elemento discendente al livello 1.

  2. È anche possibile eseguire una query riguardo queste informazioni utilizzando il metodo GetAncestor. GetAncestor prende in considerazione un argomento per il livello che si tenta di restituire. Poiché Wanida è un livello sotto Sariya, utilizzare GetAncestor(1) come dimostrato nel codice seguente:

    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
    

    Questa volta nei risultati viene indicata solo Wanida.

  3. Ora impostare @CurrentEmployee su David (EmployeeID 6) e il livello su 2. Eseguire quanto segue per restituire anche 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
    

    Questa volta, due livelli più in basso, viene indicata anche Mary che riporta a David.

Utilizzo di GetRoot e GetLevel

  1. Con il crescere della gerarchia diventa più difficile determinare la posizione dei membri nella stessa. Utilizzare il metodo GetLevel per scoprire quanti livelli ci sono al di sotto di ogni riga della gerarchia. Eseguire il codice seguente per visualizzare i livelli di tutte le righe:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode.GetLevel() AS EmpLevel, *
    FROM HumanResources.EmployeeOrg ;
    GO
    
  2. Utilizzare il metodo GetRoot per cercare il nodo radice della gerarchia. Il codice seguente restituisce la singola riga che è la radice:

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

L'attività successiva riorganizzerà la gerarchia.