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)
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기