适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 预览版中的 SQL 数据库
返回表示 this 的第 n 个祖先的 hierarchyid。
Syntax
-- Transact-SQL syntax
child.GetAncestor ( n )
-- CLR syntax
SqlHierarchyId GetAncestor ( int n )
Arguments
n
int,表示在层次结构中上升的级别数。
Return types
SQL Server 返回类型:hierarchyid
CLR 返回类型:SqlHierarchyId
Remarks
用于测试输出中的每个节点是否将当前节点作为指定级别的祖先。
如果传递的数字大于 GetLevel(),则返回 NULL。
如果传递的是负数,则引发异常。
Examples
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)
See also
IsDescendantOf(数据库引擎)
hierarchyid 数据类型方法引用
层次结构数据 (SQL Server)
hierarchyid (Transact-SQL)