GetDescendant(데이터베이스 엔진)GetDescendant (Database Engine)

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

부모의 자식 노드를 반환합니다.Returns a child node of the parent.

구문Syntax

-- Transact-SQL syntax  
parent.GetDescendant ( child1 , child2 )   
-- CLR syntax  
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )   

인수Arguments

child1child1
NULL 또는 hierarchyid 현재 노드의 자식입니다.NULL or the hierarchyid of a child of the current node.

자식 2child2
NULL 또는 hierarchyid 현재 노드의 자식입니다.NULL or the hierarchyid of a child of the current node.

반환 형식Return Types

SQL Server 반환 형식: hierarchyidSQL Server return type:hierarchyid

CLR 반환 형식: SqlHierarchyIdCLR return type:SqlHierarchyId

주의Remarks

부모의 하위 항목인 자식 노드 하나를 반환합니다.Returns one child node that is a descendant of the parent.

  • parent가 NULL인 경우 NULL을 반환합니다.If parent is NULL, returns NULL.
  • parent가 NULL이 아니고 child1과 child2가 모두 NULL인 경우 부모의 자식을 반환합니다.If parent is not NULL, and both child1 and child2 are NULL, returns a child of parent.
  • parent와 child1이 NULL이 아니고 child2가 NULL인 경우 child1보다 큰 부모의 자식을 반환합니다.If parent and child1 are not NULL, and child2 is NULL, returns a child of parent greater than child1.
  • parent와 child2가 NULL이 아니고 child1이 NULL인 경우 child2보다 작은 부모의 자식을 반환합니다.If parent and child2 are not NULL and child1 is NULL, returns a child of parent less than child2.
  • parent, child1 및 child2가 NULL이 아닌 경우 GetDescendant는 child1보다 크고 child2보다 작은 부모의 자식을 반환합니다.If parent, child1, and child2 are not NULL, returns a child of parent greater than child1 and less than child2.
  • child1이 NULL도 아니고 부모의 자식도 아닌 경우 예외가 발생합니다.If child1 is not NULL and not a child of parent, an exception is raised.
  • child2가 NULL도 아니고 부모의 자식도 아닌 경우 예외가 발생합니다.If child2 is not NULL and not a child of parent, an exception is raised.
  • child1이 child2보가 크거나 같으면 예외가 발생합니다.If child1 >= child2, an exception is raised.

GetDescendant는 결정적입니다.GetDescendant is deterministic. 따라서 동일한 입력을 GetDescendant를 호출 하면 동일한 출력이 생성 항상 됩니다.Therefore, if GetDescendant is called with the same inputs, it will always produce the same output. 그러나 생성되는 자식의 정확한 ID는 예 3에 표시된 대로 다른 노드와의 관계에 따라 달라질 수 있습니다.However, the exact identity of the child produced can vary depending upon its relationship to the other nodes, as demonstrated in example C.

Examples

1.A. 행을 가장 작은 항목 노드로 삽입Inserting a row as the least descendant node

노드 /3/1/에 있는 기존 직원에게 보고하는 새 직원을 고용합니다.A new employee is hired, reporting to an existing employee at node /3/1/. 으로 새 행 노드를 지정 하려면 인수 없이 GetDescendant 메서드를 사용 하 여 새 행을 삽입 하려면 다음 코드를 실행 /3/1/1/:Execute the following code to insert the new row by using the GetDescendant method without arguments to specify the new rows node as /3/1/1/:

DECLARE @Manager hierarchyid;   
SET @Manager = CAST('/3/1/' AS hierarchyid);  

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(NULL, NULL),  
'adventure-works\FirstNewEmployee', 'Application Intern', '3/11/07') ;  

2.B. 행을 큰 하위 항목 노드로 삽입Inserting a row as a greater descendant node

다른 새 직원을 고용, 자식 1 인수를 사용 하 여 되도록 지정 하려면 GetDescendant 메서드를 사용 하 여 새 행을 삽입 하는 다음 코드는 새 행의 노드가 A. 실행 예제와 같이 동일한 관리자에 게 보고 예 A 될 예정 되 고 /3/1/2/:Another new employee is hired, reporting to the same manager as in example A. Execute the following code to insert the new row by using the GetDescendant method using the child 1 argument to specify that the node of the new row will follow the node in example A, becoming /3/1/2/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid;  

SET @Manager = CAST('/3/1/' AS hierarchyid);  
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);  

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(@Child1, NULL),  
'adventure-works\SecondNewEmployee', 'Application Intern', '3/11/07') ;  

3.C. 행을 기존의 두 노드 사이에 삽입Inserting a row between two existing nodes

예 1과 같은 관리자에 보고 하는 세 번째 직원을 고용 보다 큰 노드에 새 행을 삽입 하는이 예제는 FirstNewEmployee 예에서 및 보다 작은 SecondNewEmployee GetDescendant 메서드를 사용 하 여 다음 코드 예제 B. 실행 합니다.A third employee is hired, reporting to the same manager as in example A. This example inserts the new row to a node greater than the FirstNewEmployee in example A, and less than the SecondNewEmployee in example B. Execute the following code by using the GetDescendant method. child1 인수와 child2 인수를 모두 사용하여 새 행의 노드가 노드 /3/1/1.1/이 되도록 지정합니다.Use both the child1 argument and the child2 argument to specify that the node of the new row will become node /3/1/1.1/:

DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid;  

SET @Manager = CAST('/3/1/' AS hierarchyid);  
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);  
SET @Child2 = CAST('/3/1/2/' AS hierarchyid);  

INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)  
VALUES  
(@Manager.GetDescendant(@Child1, @Child2),  
'adventure-works\ThirdNewEmployee', 'Application Intern', '3/11/07') ;  

테이블에 추가 하는 노드 A, B 및 C 예제를 완료 한 후 다음과 피어가 됩니다 hierarchyid 값:After completing examples A, B, and C, the nodes added to the table will be peers with the following hierarchyid values:

/3/1/1/

/3/1/1.1/

/3/1/2/

노드 /3/1/1.1/은 노드 /3/1/1/보다 크지만 같은 계층 수준에 있습니다.Node /3/1/1.1/ is greater than node /3/1/1/ but at the same level in the hierarchy.

4.D. 스칼라 예Scalar examples

SQL ServerSQL Server임의 삽입 및 삭제의 지원 hierarchyid 노드. supports arbitrary insertions and deletions of any hierarchyid nodes. GetDescendant()를 사용 하 여 항상 이므로 두 사이 노드를 생성할 수 hierarchyid 노드.By using GetDescendant(), it is always possible to generate a node between any two hierarchyid nodes. 다음 코드에서는 GetDescendant를 사용하여 예제 노드를 생성합니다.Execute the following code to generate sample nodes using GetDescendant:

DECLARE @h hierarchyid = hierarchyid::GetRoot();  
DECLARE @c hierarchyid = @h.GetDescendant(NULL, NULL);  
SELECT @c.ToString();  
DECLARE @c2 hierarchyid = @h.GetDescendant(@c, NULL);  
SELECT @c2.ToString();  
SET @c2 = @h.GetDescendant(@c, @c2);  
SELECT @c2.ToString();  
SET @c = @h.GetDescendant(@c, @c2);  
SELECT @c.ToString();  
SET @c2 = @h.GetDescendant(@c, @c2);  
SELECT @c2.ToString();  

5.E. CLR 예CLR example

다음 코드 조각에서는 GetDescendant() 메서드를 호출합니다.The following code snippet calls the GetDescendant() method:

SqlHierarchyId parent, child1, child2;  
parent = SqlHierarchyId.GetRoot();  
child1 = parent.GetDescendant(SqlHierarchyId.Null, SqlHierarchyId.Null);  
child2 = parent.GetDescendant(child1, SqlHierarchyId.Null);  
Console.Write(parent.GetDescendant(child1, child2).ToString());  

참고 항목See also

hierarchyid 데이터 형식 메서드 참조hierarchyid Data Type Method Reference
계층적 데이터(SQL Server)Hierarchical Data (SQL Server)
hierarchyid(Transact-SQL)hierarchyid (Transact-SQL)