Freigeben über


GetAncestor (Datenbankmodul)

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

Syntax

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

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

Argumente

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

Rückgabetypen

SQL Server-Rückgabetyp:hierarchyidhierarchyid

CLR-Rückgabetyp:SqlHierarchyIdSqlHierarchyId

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 Knoten 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. Dies 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 die hierarchyid vom Vorgänger 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)