共用方式為


GetReparentedValue (Database Engine)

適用於:SQL ServerAzure 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)