Partager via


GetReparentedValue (moteur de base de données)

Retourne un nœud dont le chemin d'accès depuis la racine est le chemin d'accès à newRoot, suivi du chemin d'oldRoot à ce nœud (this).

Syntaxe

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

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

Arguments

  • oldRoot
    hierarchyid qui est le nœud représentant le niveau de la hiérarchie à modifier.

  • newRoot
    hierarchyid représentant le nœud qui remplacera la section oldRoot du nœud actuel afin de le déplacer.

Types de retour

**Type de retour SQL Server :**hierarchyid

**Type de retour CLR :**SqlHierarchyId

Notes

Peut être utilisé pour modifier l'arborescence en déplaçant des nœuds d'oldRoot vers newRoot. GetReparentedValue peut être utilisé pour déplacer un nœud d'une hiérarchie vers un nouvel emplacement de la hiérarchie. Le type de données hierarchyid représente, mais n'applique pas la structure hiérarchique. Les utilisateurs doivent s'assurer que la structure hierarchyid convient au nouvel emplacement. Un index unique sur le type de données hierarchyid peut éviter la duplication des entrées. Pour obtenir un exemple de déplacement d'une sous-arborescence entière, consultez Utilisation du type de données hierarchyid.

Exemples

A. Comparaison de deux emplacements de nœuds

L'exemple suivant montre le hierarchyid actuel d'un nœud. Il montre également ce que serait le hierarchyid du nœud si le nœud était déplacé pour devenir un descendant du nœud @NewParent. Il utilise la méthode ToString() pour afficher les relations hiérarchiques.

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. Mise à jour d'un nœud à un nouvel emplacement

L'exemple suivant utilise GetReparentedValue() dans une instruction UPDATE pour déplacer un nœud d'un emplacement à un autre dans la hiérarchie :

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. Exemple CLR

L'extrait de code suivant appelle la méthode GetReparentedValue () :

this. GetReparentedValue(oldParent, newParent)