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

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Возвращает узел, путь к которому от корневого элемента состоит из пути к newRoot и пути от oldRoot.Returns a node whose path from the root is the path to newRoot, followed by the path from oldRoot.

СинтаксисSyntax

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

АргументыArguments

oldRootoldRoot
hierarchyid узла, представляющего уровень иерархии, который подлежит изменению.A hierarchyid that is the node that represents the level of the hierarchy that is to be modified.

newRootnewRoot
Тип hierarchyid, представляющий узел.A hierarchyid that represents the node. Замените раздел oldRoot текущего узла, чтобы переместить этот узел.Replace the oldRoot section of the current node to move the node.

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

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

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

RemarksRemarks

Используется для изменения дерева путем перемещения узлов из oldRoot в newRoot.Used to modify the tree by moving nodes from oldRoot to newRoot. Метод GetReparentedValue используется для перемещения узла иерархии в новое расположение в иерархии.GetReparentedValue is used to move a hierarchy node to a new location in the hierarchy. Тип данных hierarchyid представляет иерархическую структуру, но не обеспечивает ее соблюдение.The hierarchyid data type represents but doesn't enforce the hierarchical structure. Пользователям необходимо убедиться в том, что структура идентификатора иерархии пригодна для нового местоположения.Users must ensure that the hierarchyid is appropriately structured for the new location. Уникальный индекс с типом данных hierarchyid позволяет избежать повторения записей.A unique index on the hierarchyid data type can help prevent duplicate entries. Пример перемещения поддерева целиком см. в статье Иерархические данные (SQL Server).For an example of moving an entire subtree, see Hierarchical Data (SQL Server).

ПримерыExamples

A.A. Сравнение двух местоположений узлаComparing two node locations

В следующем примере показан текущий идентификатор иерархии для узла.The following example shows the current hierarchyid of a node. В нем также демонстрируется, как будет выглядеть hierarchyid узла, если при перемещении этот узел станет потомком узла **@NewParent**.It also shows what the hierarchyid of the node would be if you move the node to become a descendant of the **@NewParent** node. В примере используется метод ToString() для демонстрации иерархических связей.It uses the ToString() method to show the hierarchical relationships.

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. Перемещение узла в новое местоположение путем обновленияUpdating a node to a new location

В следующем примере используется метод GetReparentedValue() в инструкции UPDATE для перемещения узла из прежнего в новое местоположение в иерархии.The following example uses GetReparentedValue() in an UPDATE statement to move a node from an old location to a new location in the hierarchy:

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. Пример CLRCLR example

В следующем фрагменте кода вызывается метод GetReparentedValue ():The following code snippet calls the GetReparentedValue () method:

this. GetReparentedValue(oldParent, newParent)  

См. также разделSee also

Справочник по методам типа данных hierarchyidhierarchyid Data Type Method Reference
Иерархические данные (SQL Server)Hierarchical Data (SQL Server)
hierarchyid (Transact-SQL)hierarchyid (Transact-SQL)