GetReparentedValue (データベース エンジン)

ルートからのパスが newRoot へのパスであるノードと、oldRoot から this へのパスを返します。

構文

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

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

引数

  • oldRoot
    変更対象となる階層レベルを表すノードの hierarchyid。

  • newRoot
    ノードを移動するために現在のノードの oldRoot セクションと入れ替えられるノードを表す hierarchyid。

戻り値の型

**SQL Server の戻り値の型 :**hierarchyid

**CLR の戻り値の型 :**SqlHierarchyId

説明

ノードを oldRoot から newRoot に移動することによってツリーを変更するために使用できます。GetReparentedValue を使用すると、ある階層のノードを階層内の新しい位置に移動できます。hierarchyid データ型は階層構造を表しますが、階層構造を適用するものではありません。ユーザーは、hierarchyid が新しい位置に対して正しく構成されていることを確認する必要があります。hierarchyid データ型の一意なインデックスを使用すると、エントリの重複を回避できます。サブツリー全体を移動する例については、「hierarchyid データの操作」を参照してください。

A. 2 つのノードの位置の比較

次の例は、ノードの現在の 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)