Condividi tramite


GetAncestor (Motore di database)

Restituisce un valore hierarchyid che rappresenta l'ennesimo predecessore di questo elemento.

Sintassi

-- Transact-SQL syntax
child.GetAncestor ( n ) 

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

Argomenti

  • n
    Valore int che rappresenta il numero di livelli da salire nella gerarchia.

Tipi restituiti

Tipo SQL Server restituito: hierarchyid hierarchyid

Tipo CLR restituito: SqlHierarchyId SqlHierarchyId

Osservazioni

Utilizzato per testare se per ogni nodo nell'output il nodo corrente rappresenta un predecessore al livello specificato.

Se viene passato un numero maggiore di GetLevel (), viene restituito NULL.

Se viene passato un numero negativo, viene generata un'eccezione.

Esempi

A. Ricerca dei nodi figlio di un padre

GetAncestor(1) restituisce i dipendenti per cui david0 rappresenta il predecessore immediato (padre). Nell'esempio seguente viene utilizzato GetAncestor(1):

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(1) = @CurrentEmployee ;

B. Restituzione di nipoti di un padre

GetAncestor(2) restituisce i dipendenti che si trovano in una posizione inferiore di due livelli nella gerarchia rispetto al nodo corrente. Tali nodi sono i nipoti del nodo corrente. Nell'esempio seguente viene utilizzato GetAncestor(2):

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\ken0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(2) = @CurrentEmployee ;

C. Restituzione della riga corrente

Per restituire il nodo corrente utilizzando GetAncestor(0), eseguire il codice seguente.

DECLARE @CurrentEmployee hierarchyid
SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeDemo
WHERE LoginID = 'adventure-works\david0'

SELECT OrgNode.ToString() AS Text_OrgNode, *
FROM HumanResources.EmployeeDemo
WHERE OrgNode.GetAncestor(0) = @CurrentEmployee ;

D. Restituzione di un livello della gerarchia se una tabella non è presente

GetAncestor restituisce il livello selezionato della gerarchia anche se una tabella non è presente. Nel codice seguente ad esempio viene determinato un dipendente corrente e viene restituito il valore hierarchyid del predecessore del dipendente corrente senza fare riferimento a una tabella.

DECLARE @CurrentEmployee hierarchyid ;
DECLARE @TargetEmployee hierarchyid ;
SELECT @CurrentEmployee = '/2/3/1.2/5/3/' ;
SELECT @TargetEmployee = @CurrentEmployee.GetAncestor(2) ;
SELECT @TargetEmployee.ToString(), @TargetEmployee ;

E. Chiamata a un metodo Common Language Runtime

Nel frammento di codice seguente viene chiamato il metodo GetAncestor().

this.GetAncestor(1)