GetReparentedValue(数据库引擎)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

返回其相对于根的路径是到 newRoot 的路径的节点,后跟相对于 oldRoot 的路径。

语法

-- 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. 比较两个节点位置

以下示例显示了节点的当前 hierarchyid。 它还显示了如果移动节点使其成为 @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)