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)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по