GetReparentedValue (компонент Database Engine)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Возвращает узел, путь к которому от корневого элемента состоит из пути к newRoot и пути от oldRoot.

Синтаксис

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

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

oldRoot
hierarchyid узла, представляющего уровень иерархии, который подлежит изменению.

newRoot
Тип hierarchyid, представляющий узел. Замените раздел oldRoot текущего узла, чтобы переместить этот узел.

Типы возвращаемых данных

Возвращаемый тип SQL Server:hierarchyid

Возвращаемый тип CLR:SqlHierarchyId

Замечания

Используется для изменения дерева путем перемещения узлов из oldRoot в newRoot. Метод GetReparentedValue используется для перемещения узла иерархии в новое расположение в иерархии. Тип данных hierarchyid представляет иерархическую структуру, но не обеспечивает ее соблюдение. Пользователям необходимо убедиться в том, что структура идентификатора иерархии пригодна для нового местоположения. Уникальный индекс с типом данных hierarchyid позволяет избежать повторения записей. Пример перемещения поддерева целиком см. в статье Иерархические данные (SQL Server).

Примеры

А. Сравнение двух местоположений узла

В следующем примере показан текущий идентификатор иерархии для узла. В нем также демонстрируется, как будет выглядеть hierarchyid узла, если при перемещении этот узел станет потомком узла NewParent. В примере используется метод 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. Перемещение узла в новое местоположение путем обновления

В следующем примере используется метод GetReparentedValue() в инструкции UPDATE для перемещения узла из прежнего в новое местоположение в иерархии.

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)