GetAncestor(数据库引擎)

返回表示 this 的第 n 个祖先的 hierarchyid。

语法

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

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

参数

  • n
    int,表示在层次结构中上升的级别数。

返回类型

**SQL Server 返回类型:**hierarchyid

**CLR 返回类型:**SqlHierarchyId

注释

用于测试输出中的每个节点是否将当前节点作为指定级别的祖先。

如果传递的数字大于 GetLevel(),则返回 NULL。

如果传递的是负数,则引发异常。

示例

A.查找父级的子节点

GetAncestor(1) 返回以 david0 作为其直接祖先(其父级)的员工。 下面的示例使用 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.返回父级的孙级

GetAncestor(2) 返回层次结构中从当前节点下降两个级别的员工。 这些节点是当前节点的孙级。 下面的示例使用 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.返回当前行

若要使用 GetAncestor(0) 返回当前节点,请执行以下代码。

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.如果表不存在,则返回层次结构级别

即使表不存在,GetAncestor 也会返回层次结构中所选的级别。 例如,以下代码指定当前员工,并在不引用表的情况下返回当前员工的祖先的 hierarchyid。

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

E.调用公共语言运行时方法

下面的代码段调用 GetAncestor() 方法。

this.GetAncestor(1)

请参阅

参考

IsDescendantOf(数据库引擎)

hierarchyid (Transact-SQL)

概念

hierarchyid 数据类型方法引用

层次结构数据 (SQL Server)