Share via


GetAncestor(데이터베이스 엔진)

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

구문

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

-- CLR syntax
SqlHierarchyId GetAncestor ( int n )

인수

  • n
    계층에서 위로 이동할 수준 수를 나타내는 int입니다.

반환 형식

**SQL Server 반환 형식:**hierarchyid

**CLR 반환 형식:**SqlHierarchyId

주의

출력의 각 노드가 현재 노드를 지정된 수준의 상위 항목으로 갖는지 여부를 테스트하는 데 사용됩니다.

GetLevel()보다 큰 숫자가 전달되면 NULL이 반환됩니다.

음수가 전달되면 예외가 발생합니다.

1. 부모의 자식 노드 찾기

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 ;

2. 부모의 손자 반환

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 ;

3. 현재 행 반환

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 ;

4. 테이블이 없는 경우 계층 수준 반환

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 ;

5. 공통 언어 런타임 메서드 호출

다음 코드 조각은 GetAncestor() 메서드를 호출합니다.

this.GetAncestor(1)