Share via


GetAncestor(데이터베이스 엔진)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

항목의 n번째 상위를 나타내는 hierarchyid반환합니다.

Syntax

-- 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)