Share via


GetAncestor (Datenbank-Engine)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Gibt eine hierarchyid zurück, die den n-ten Vorgänger von this darstellt.

Syntax

-- Transact-SQL syntax  
child.GetAncestor ( n )   
-- CLR syntax  
SqlHierarchyId GetAncestor ( int n )  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

n
Ein int-Wert, der die Anzahl der Hierarchieebenen nach oben darstellt.

Rückgabetypen

SQL Server-Rückgabetyp: hierarchyid

CLR-Rückgabetyp: SqlHierarchyId

Hinweise

Hiermit wird getestet, ob jeder Knoten in der Ausgabe den aktuellen Knoten als Vorgänger auf der angegebenen Ebene aufweist.

Wenn eine Zahl größer als GetLevel () übergeben wird, wird NULL zurückgegeben.

Wenn eine negative Zahl übergeben wird, wird eine Ausnahme ausgelöst.

Beispiele

A. Suchen der untergeordneten Knoten eines übergeordneten Elements

GetAncestor(1) gibt die Mitarbeiter zurück, die david0 als unmittelbaren Vorgänger (übergeordnetes Element) haben. Im folgenden Beispiel wird GetAncestor(1) verwendet.

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. Zurückgeben der untergeordneten Elemente zweiter Ordnung eines übergeordneten Elements

GetAncestor(2) gibt die Mitarbeiter zurück, die sich in der aktuellen Hierarchie zwei Ebenen unter dem aktuellen Knoten befinden. Diese Mitarbeiter sind die untergeordneten Knoten zweiter Ordnung des aktuellen Knotens. Im folgenden Beispiel wird GetAncestor(2) verwendet.

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. Zurückgeben der aktuellen Zeile

Um den aktuellen Knoten mit GetAncestor(0) zurückzugeben, führen Sie den folgenden Code aus.

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. Zurückgeben einer Hierarchieebene, wenn keine Tabelle vorhanden ist

GetAncestor gibt die ausgewählte Ebene in der Hierarchie zurück, auch wenn keine Tabelle vorhanden ist. Beispiel: Mit dem folgenden Code wird ein aktueller Mitarbeiter festgelegt, und das hierarchyid-Element des Vorgängers des aktuellen Mitarbeiters wird ohne Verweis auf eine Tabelle zurückgegeben.

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

E. Aufrufen einer Common Language Runtime-Methode

Im folgenden Codeausschnitt wird die GetAncestor()-Methode aufgerufen.

this.GetAncestor(1)  

Weitere Informationen

IsDescendantOf (Datenbank-Engine)
hierarchyid-Datentyp-Methodenverweis
Hierarchische Daten (SQL Server)
hierarchyid (Transact-SQL)