GetAncestor(数据库引擎)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

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 数据类型方法引用
层次结构数据 (SQL Server)
hierarchyid (Transact-SQL)