GetReparentedValue(데이터베이스 엔진)

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

루트에서 newRoot까지의 경로 다음에 oldRoot에서 시작되는 경로가 오는 노드를 반환합니다.

Syntax

-- Transact-SQL syntax  
node. GetReparentedValue ( oldRoot, newRoot )  
-- CLR syntax  
SqlHierarchyId GetReparentedValue ( SqlHierarchyId oldRoot , SqlHierarchyId newRoot )  

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

oldRoot
수정할 계층의 수준을 나타내는 노드인 hierarchyid입니다.

newRoot
노드를 나타내는 hierarchyid 입니다. 현재 노드의 oldRoot 섹션을 바꿔서 노드를 이동합니다.

반환 형식

SQL Server 반환 형식: hierarchyid

CLR 반환 형식:SqlHierarchyId

설명

oldRoot에서 newRoot로 노드를 이동하여 트리를 수정하는 데 사용됩니다. GetReparentedValue는 계층 구조 노드를 계층의 새 위치로 이동하는 데 사용됩니다. hierarchyid 데이터 형식은 계층 구조를 나타내지만 적용하지는 않습니다. 사용자는 hierarchyid가 새 위치에 맞게 적절하게 구조화되었는지 확인해야 합니다. hierarchyid 데이터 형식의 고유한 인덱스는 중복 항목을 방지하는 데 도움이 될 수 있습니다. 전체 하위 트리를 이동하는 예는 계층적 데이터(SQL Server)를 참조하세요.

예제

A. 두 노드 위치 비교

다음 예제에서는 노드의 현재 계층 구조를 보여줍니다. 또한 @NewParent 노드의 하위 항목이 되도록 노드를 이동하는 경우 노드의 hierarchyid가 어떻게 달라지는지 보여 줍니다. 이 예에서는 ToString() 메서드를 사용하여 계층 관계를 보여 줍니다.

DECLARE @SubjectEmployee hierarchyid , @OldParent hierarchyid, @NewParent hierarchyid  
SELECT @SubjectEmployee = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\gail0' ;  
SELECT @OldParent = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\roberto0' ; -- who is /1/1/  
SELECT @NewParent = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\wanida0' ; -- who is /2/3/  
  
SELECT OrgNode.ToString() AS Current_OrgNode_AS_Text,   
(@SubjectEmployee. GetReparentedValue(@OldParent, @NewParent) ).ToString() AS Proposed_OrgNode_AS_Text,  
OrgNode AS Current_OrgNode,  
@SubjectEmployee. GetReparentedValue(@OldParent, @NewParent) AS Proposed_OrgNode,  
*  
FROM HumanResources.EmployeeDemo  
WHERE OrgNode = @SubjectEmployee ;  
GO  

B. 노드를 새 위치로 업데이트

다음 예제에서는 UPDATE 문을 사용하여 GetReparentedValue() 이전 위치에서 계층의 새 위치로 노드를 이동합니다.

DECLARE @SubjectEmployee hierarchyid , @OldParent hierarchyid, @NewParent hierarchyid  
SELECT @SubjectEmployee = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\gail0' ; -- Node /1/1/2/  
SELECT @OldParent = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\roberto0' ; -- Node /1/1/  
SELECT @NewParent = OrgNode FROM HumanResources.EmployeeDemo  
  WHERE LoginID = 'adventure-works\wanida0' ; -- Node /2/3/  
  
UPDATE HumanResources.EmployeeDemo  
SET OrgNode = @SubjectEmployee. GetReparentedValue(@OldParent, @NewParent)   
WHERE OrgNode = @SubjectEmployee ;  
  
SELECT OrgNode.ToString() AS Current_OrgNode_AS_Text,   
*  
FROM HumanResources.EmployeeDemo  
WHERE LoginID = 'adventure-works\gail0' ; -- Now node /2/3/2/  

C. CLR 예제

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

this. GetReparentedValue(oldParent, newParent)  

참고 항목

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