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
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.
È inoltre possibile eseguire una query per ottenere tali informazioni utilizzando il metodo GetAncestor. GetAncestor accetta 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.
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
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
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.
Attività successiva della lezione
Riordinamento di dati in una tabella gerarchica utilizzando metodi gerarchici