GetReparentedValue (データベース エンジン)
ルートからのパスが、newRoot へのパスと、その後に oldRoot から this へのパスが続くようになっているノードを返します。
適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで) |
構文
-- 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 データ型の一意なインデックスを使用すると、エントリの重複を回避できます。 サブツリー全体を移動する例については、「階層データ (SQL Server)」を参照してください。
使用例
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)