Share via


GetReparentedValue(데이터베이스 엔진)

루트 경로가 newRoot이고 그 뒤에 oldRoot에서 현재 항목까지의 경로가 오는 노드를 반환합니다.

구문

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

-- CLR syntax
SqlHierarchyId GetReparentedValue ( SqlHierarchyId oldRoot , SqlHierarchyId newRoot )

인수

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

  • newRoot
    노드를 이동하기 위해 현재 노드의 oldRoot 섹션을 대체할 노드를 나타내는 hierarchyid입니다.

반환 형식

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

**CLR 반환 형식:**SqlHierarchyId

주의

노드를 oldRoot에서 newRoot로 이동하여 트리를 수정하는 데 사용할 수 있습니다. GetReparentedValue를 사용하면 계층에서 노드를 새 위치로 이동할 수 있습니다. hierarchyid 데이터 형식은 계층 구조를 나타내기만 하고 강제 적용하지는 않습니다. 사용자는 hierarchyid가 새 위치에 대해 적절히 구성되어 있는지 확인해야 합니다. hierarchyid 데이터 형식에 대한 고유 인덱스는 중복 항목이 발생하지 않도록 하는 데 도움이 됩니다. 전체 하위 트리를 이동하는 예는 hierarchyid 데이터 작업을 참조하십시오.

1. 두 노드 위치 비교

다음 예에서는 노드의 현재 hierarchyid를 보여 줍니다. 또한 노드를 @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/

3. CLR 예

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

this. GetReparentedValue(oldParent, newParent)