Share via


GetAncestor (motor de base de datos)

Devuelve un identificador hierarchyid que representa el antecesor n-ésimo de this.

Sintaxis

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

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

Argumentos

  • n
    Un tipo int, que representa el número de niveles que subir en la jerarquía.

Tipos de valores devueltos

Tipo de valor devuelto de SQL Server: hierarchyid hierarchyid

Tipo de valor devuelto de CLR: SqlHierarchyId SqlHierarchyId

Comentarios

Se usa para probar si cada nodo de la salida tiene el nodo actual como antecesor en el nivel especificado.

Si se pasa un número mayor que GetLevel(), se devuelve NULL.

Si se pasa un número negativo, se produce una excepción.

Ejemplos

A. Buscar los nodos secundarios de un elemento primario

GetAncestor(1) devuelve los empleados que tienen david0 como su antecesor inmediato (su elemento primario). En el ejemplo siguiente se utiliza 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. Devolver los descendientes de los elementos secundarios de un elemento primario

GetAncestor(2) devuelve los empleados que están dos niveles por debajo en la jerarquía del nodo actual. Éstos son los descendientes de los secundarios del nodo actual. En el ejemplo siguiente se utiliza 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. Devolver la fila actual

Para devolver el nodo actual utilizando GetAncestor(0), ejecute el código siguiente.

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. Devolver un nivel de la jerarquía si una tabla no está presente

GetAncestor devuelve el nivel seleccionado en la jerarquía incluso si una tabla no está presente. Por ejemplo, el código siguiente designa a un empleado actual y devuelve el identificador hierarchyid del antecesor del empleado actual sin hacer referencia a una tabla.

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

E. Llamar a un método de Common Language Runtime

En el fragmento de código siguiente se llama al método GetAncestor().

this.GetAncestor(1)