Freigeben über


GetReparentedValue (Datenbankmodul)

Gibt einen Knoten zurück, dessen Pfad vom Stammelement dem Pfad zu newRoot entspricht, gefolgt von dem Pfad von oldRoot zu diesem.

Syntax

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

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

Argumente

  • oldRoot
    Ein hierarchyid-Wert, der den Knoten der zu ändernden Hierarchieebene angibt.

  • newRoot
    Ein hierarchyid-Wert, der den Knoten angibt, der den oldRoot-Abschnitt des aktuellen Knotens zur Verschiebung des Knotens ersetzt.

Rückgabetypen

SQL Server-Rückgabetyp:hierarchyidhierarchyid

CLR-Rückgabetyp:SqlHierarchyIdSqlHierarchyId

Hinweise

Kann verwendet werden, um die Struktur durch Verschieben von Knoten von oldRoot nach newRoot zu ändern. Mit GetReparentedValue können Sie einen Knoten einer Hierarchie an eine neue Position in der Hierarchie verschieben. Der hierarchyid-Datentyp stellt die hierarchische Struktur dar, setzt sie jedoch nicht durch. Benutzer müssen sicherstellen, dass der hierarchyid-Wert für die neue Position angemessen strukturiert ist. Mit einem eindeutigen Index für den hierarchyid-Datentyp können Sie doppelte Einträge vermeiden. Ein Beispiel für die Verschiebung einer vollständigen Teilstruktur finden Sie unter Arbeiten mit hierarchyid-Daten.

Beispiele

A. Vergleichen von zwei Knotenpositionen

Im folgenden Beispiel wird der aktuelle hierarchyid-Wert eines Knotens gezeigt. Des Weiteren wird der hierarchyid-Wert gezeigt, den der Knoten aufweist, wenn er an die Position des Nachfolgers des @NewParent-Knotens verschoben wird. Zur Darstellung der hierarchischen Beziehungen wird die ToString()-Methode verwendet.

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. Aktualisieren eines Knotens mit einer neuen Position

Im folgenden Beispiel wird GetReparentedValue() in einer UPDATE-Anweisung verwendet, um einen Knoten in einer Hierarchie von einer alten an eine neue Position zu verschieben:

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-Beispiel

Im folgenden Codeausschnitt wird die GetReparentedValue ()-Methode aufgerufen.

this. GetReparentedValue(oldParent, newParent)