GetReparentedValue (Database Engine)
適用於:SQL Server
Azure SQL 資料庫 Azure SQL 受控執行個體
傳回節點,其從根開始之路徑是到 newRoot 的路徑,後面跟隨著從 oldRoot 開始的路徑。
Syntax
-- 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)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應