GetReparentedValue (Datenbankmodul)
Gibt einen Knoten zurück, dessen Pfad vom Stammelement dem Pfad zu newRoot entspricht, gefolgt vom Pfad von oldRoot zu this.
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: hierarchyid
CLR-Rückgabetyp: SqlHierarchyId
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 Hierarchische Daten (SQL Server).
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)