Lezione 2-3: Esecuzione di query su una tabella gerarchica tramite metodi gerarchiciLesson 2-3 - Querying a Hierarchical Table Using Hierarchy Methods

Ora che la tabella HumanResources.EmployeeOrg è completamente popolata, in questa attività verrà illustrato come eseguire una query sulla gerarchia utilizzando alcuni dei metodi gerarchici.Now that the HumanResources.EmployeeOrg table is fully populated, this task will show you how to query the hierarchy using some of the hierarchical methods.

Per trovare nodi subordinatiTo find subordinate nodes

  1. Sariya ha un dipendente subordinato.Sariya has one subordinate employee. Per eseguire una query sui subalterni di Sariya, eseguire la query seguente che usa il metodo IsDescendantOf :To query for Sariya's subordinates, execute the following query that uses the IsDescendantOf method:

    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.The result lists both Sariya and Wanida. Sariya viene indicata perché rappresenta l'elemento discendente al livello 0.Sariya is listed because she is the descendant at the 0 level. Wanida rappresenta l'elemento discendente al livello 1.Wanida is the descendant at the 1 level.

  2. È anche possibile eseguire una query per ottenere tali informazioni usando il metodo GetAncestor .You can also query for this information by using the GetAncestor method. GetAncestor accetta un argomento per il livello che si tenta di restituire.GetAncestor takes an argument for the level that you are trying to return. Poiché Wanida è un livello sotto Sariya, utilizzare GetAncestor(1) come dimostrato nel codice seguente:Since Wanida is one level underneath Sariya, use GetAncestor(1) as demonstrated in the following code:

    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.This time the result lists only Wanida.

  3. Ora impostare @CurrentEmployee su David (EmployeeID 6) e il livello su 2.Now change the @CurrentEmployee to David (EmployeeID 6) and the level to 2. Eseguire quanto segue per restituire anche Wanida:Execute the following to also return 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.This time, you also receive Mary who also reports to David, two levels down.

Utilizzo di GetRoot e GetLevelTo use GetRoot, and GetLevel

  1. Con il crescere della gerarchia diventa più difficile determinare la posizione dei membri nella stessa.As the hierarchy grows larger it is more difficult to determine where the members are in the hierarchy. Usare il metodo GetLevel per scoprire quanti livelli ci sono al di sotto di ogni riga della gerarchia.Use the GetLevel method to find how many levels down each row is in the hierarchy. Eseguire il codice seguente per visualizzare i livelli di tutte le righe:Execute the following code to view the levels of all the rows:

    SELECT OrgNode.ToString() AS Text_OrgNode,   
    OrgNode.GetLevel() AS EmpLevel, *  
    FROM HumanResources.EmployeeOrg ;  
    GO  
    
  2. Usare il metodo GetRoot per cercare il nodo radice della gerarchia.Use the GetRoot method to find the root node in the hierarchy. Il codice seguente restituisce la singola riga che è la radice:The following code returns the single row which is the root:

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

L'attività successiva riorganizzerà la gerarchia.The next task will reorganize the hierarchy.

Attività successiva della lezioneNext Task in Lesson

Riordinamento di dati in una tabella gerarchica utilizzando metodi gerarchiciReordering Data in a Hierarchical Table Using Hierarchical Methods