GetAncestor (moteur de base de données)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Retourne un hierarchyid qui représente le nième ancêtre de this.

Syntaxe

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

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Arguments

n
int représentant le nombre de niveaux à remonter dans la hiérarchie.

Types de retour

Type de retour SQL Server : hierarchyid

Type de retour CLR : SqlHierarchyId

Remarques

Utilisé pour tester si chaque nœud de la sortie a pour ancêtre le nœud actuel au niveau spécifié.

Si un nombre supérieur à GetLevel() est passé, la valeur Null est retournée.

Si un nombre négatif est passé, une exception est levée.

Exemples

R. Recherche des nœuds enfants d'un parent

GetAncestor(1) retourne les employés qui ont david0 pour ancêtre immédiat (leur parent). L'exemple suivant utilise 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. Retour des petits-enfants d'un parent

GetAncestor(2) retourne les employés situés dans la hiérarchie deux niveaux en-dessous du nœud actuel. Ces employés sont les petits-enfants du nœud actuel. L'exemple suivant utilise 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. Retour de la ligne actuelle

Pour retourner le nœud actuel en utilisant GetAncestor(0), exécutez le code suivant.

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. Retour d’un niveau de la hiérarchie si une table n’est pas présente

GetAncestor retourne le niveau sélectionné de la hiérarchie même si une table n’est pas présente. Par exemple, le code suivant désigne un employé actuel et retourne le hierarchyid de l’ancêtre de l’employé actuel sans référence à une table.

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

E. Appel d'une méthode CLR (Common Language Runtime)

L'extrait de code suivant appelle la méthode GetAncestor().

this.GetAncestor(1)  

Voir aussi

IsDescendantOf (moteur de base de données)
Référence de méthodes de type de données hierarchyid
Données hiérarchiques (SQL Server)
hierarchyid (Transact-SQL)