共用方式為


GetReparentedValue (Database Engine)

傳回一個節點,其根目錄的路徑是 newRoot 的路徑,後面接著從 oldRoot 到 <this> 的路徑。

語法

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

-- CLR syntax
SqlHierarchyId GetReparentedValue ( SqlHierarchyId oldRoot , SqlHierarchyId newRoot )

引數

  • oldRoot
    hierarchyid,它是代表即將修改之階層層級的節點。

  • newRoot
    hierarchyid,代表將取代目前節點之 oldRoot 區段以便移動該節點的節點。

傳回類型

**SQL Server 傳回類型:**hierarchyid

**CLR 傳回類型:**SqlHierarchyId

備註

可用來將節點從 oldRoot 移至 newRoot,藉以修改樹狀目錄。GetReparentedValue 可用來將階層的節點移至階層中的新位置。hierarchyid 資料類型代表但不會強制執行階層式結構。使用者必須確保此 hierarchyid 已針對新位置適當地結構化。hierarchyid 資料類型的唯一索引可以協助防止出現重複的項目。如需移動整個子樹的範例,請參閱<使用 hierarchyid 資料>。

範例

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)