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)