반응형
Ant_U
DBA 개미
Ant_U
전체 방문자
오늘
어제
  • 분류 전체보기 (262)
    • AWS (3)
    • C# (1)
    • SQL (236)
      • MYSQL (186)
      • MSSQL (50)
    • 자격증 (20)
      • SQLD (12)
      • SQLP (8)

인기 글

최근 글

250x250
hELLO · Designed By 정상우.
Ant_U

DBA 개미

[MSSQL] GetReparentedValue 사용 방법 및 예시
SQL/MSSQL

[MSSQL] GetReparentedValue 사용 방법 및 예시

2024. 4. 23. 13:45
728x90
반응형

`GetReparentedValue` 함수는 SQL Server의 계층적 데이터를 다룰 때 사용되는 함수 중 하나입니다. 이 함수는 계층적 데이터의 노드를 다른 부모 노드로 이동할 때 사용됩니다. 주어진 노드와 새로운 부모 노드의 `HierarchyID` 값을 기반으로 이동된 노드의 새로운 `HierarchyID` 값을 반환합니다.

이 함수는 다음과 같은 구문으로 사용됩니다:

GetReparentedValue ( parent_hierarchyid :: hierarchyid , old_root_hierarchyid :: hierarchyid , new_root_hierarchyid :: hierarchyid )



여기서:

- `parent_hierarchyid`는 이동할 노드의 `HierarchyID` 값입니다.
- `old_root_hierarchyid`는 현재 부모 노드의 `HierarchyID` 값입니다.
- `new_root_hierarchyid`는 새로운 부모 노드의 `HierarchyID` 값입니다.

`GetReparentedValue` 함수는 이동된 노드의 새로운 `HierarchyID` 값을 반환합니다.

이제 몇 가지 예시를 통해 `GetReparentedValue` 함수를 설명해보겠습니다:

1. 노드 이동:

DECLARE @oldParent HIERARCHYID;
DECLARE @newParent HIERARCHYID;
DECLARE @nodeToMove HIERARCHYID;

-- 이동할 노드와 이동할 새로운 부모 노드 설정
SELECT @nodeToMove = EmployeeHierarchy 
FROM Employees 
WHERE EmployeeID = 3; -- 이동할 노드

SELECT @oldParent = EmployeeHierarchy 
FROM Employees 
WHERE EmployeeID = 1; -- 현재 부모 노드

SELECT @newParent = EmployeeHierarchy 
FROM Employees 
WHERE EmployeeID = 2; -- 새로운 부모 노드

-- GetReparentedValue 함수를 사용하여 노드 이동
DECLARE @newNode HIERARCHYID;
SET @newNode = GetReparentedValue(@nodeToMove, @oldParent, @newParent);

-- 결과 출력
PRINT '노드 이동 전: ' + CONVERT(NVARCHAR(MAX), @nodeToMove);
PRINT '노드 이동 후: ' + CONVERT(NVARCHAR(MAX), @newNode);


이 경우 `EmployeeID`가 3인 노드가 `EmployeeID`가 1인 노드의 자식에서 `EmployeeID`가 2인 노드의 자식으로 이동됩니다. 이동된 노드의 새로운 `HierarchyID` 값이 출력됩니다.

2. 노드 이동 후 계층 구조 다시 설정:

-- 새로운 부모 노드의 하위 노드들의 계층 구조 다시 설정
WITH NewHierarchy AS (
    SELECT EmployeeID,
           EmployeeName,
           HIERARCHYID::Parse(CONVERT(NVARCHAR(MAX), GetReparentedValue(EmployeeHierarchy, @oldParent, @newParent))) AS NewHierarchy
    FROM Employees
    WHERE EmployeeHierarchy.GetAncestor(1) = @newParent
)
UPDATE Employees
SET EmployeeHierarchy = NewHierarchy.NewHierarchy
FROM Employees
INNER JOIN NewHierarchy ON Employees.EmployeeID = NewHierarchy.EmployeeID;

-- 결과 확인
SELECT * FROM Employees;


이렇게 하면 이동된 노드 및 해당 노드의 하위 노드들의 계층 구조가 새로운 부모 노드의 하위로 변경됩니다.

`GetReparentedValue` 함수를 사용하여 계층적 데이터의 노드를 이동할 수 있습니다. 위의 예시를 통해 함수의 사용법과 기능을 이해하셨을 것입니다. 

728x90
반응형

'SQL > MSSQL' 카테고리의 다른 글

[MSSQL] IsDescendantOf 사용 방법 및 예시  (0) 2024.04.23
[MSSQL] GetRoot 사용 방법 및 예시  (1) 2024.04.22
[MSSQL] GetLevel 사용 방법 및 예시  (0) 2024.04.22
[MSSQL] GetDescendant 사용 방법 및 예시  (0) 2024.04.09
[MSSQL] GetAncestor 사용 방법 및 예시  (0) 2024.04.09
[MSSQL] hierarchyid 메서드 사용 방법 및 예시  (0) 2024.04.09
[MSSQL] smalldatetime 사용 방법 및 예시  (0) 2024.04.09
[MSSQL] datetimeoffset 사용 방법 및 예시  (0) 2024.04.09
    'SQL/MSSQL' 카테고리의 다른 글
    • [MSSQL] IsDescendantOf 사용 방법 및 예시
    • [MSSQL] GetRoot 사용 방법 및 예시
    • [MSSQL] GetLevel 사용 방법 및 예시
    • [MSSQL] GetDescendant 사용 방법 및 예시
    Ant_U
    Ant_U

    티스토리툴바