GetAncestor (moteur de base de données)
Retourne un hierarchyid qui représente le nième ancêtre de ce nœud (this).
Syntaxe
-- Transact-SQL syntax
child.GetAncestor ( n )
-- CLR syntax
SqlHierarchyId GetAncestor ( int n )
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
Notes
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
A. 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. Il s'agit des 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)