Share via


GetReparentedValue (motor de base de datos)

Devuelve un nodo cuya ruta de acceso desde la raíz es la ruta de acceso a newRoot, seguida de la ruta de acceso de oldRoot a this.

Sintaxis

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

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

Argumentos

  • oldRoot
    hierarchyid que es el nodo que representa el nivel de la jerarquía que se va a modificar.

  • newRoot
    hierarchyid que representa el nodo que reemplazará la sección oldRoot del nodo actual para mover el nodo.

Tipos de valores devueltos

Tipo de valor devuelto de SQL Server:hierarchyidhierarchyid

Tipo de valor devuelto de CLR:SqlHierarchyIdSqlHierarchyId

Notas

Se puede utilizar para modificar el árbol moviendo los nodos de oldRoot a newRoot. GetReparentedValue se puede utilizar para mover un nodo de una jerarquía a una ubicación nueva en la jerarquía. El tipo de datos hierarchyid representa la estructura jerárquica pero no la exige. Los usuarios deben asegurarse de que el identificador hierarchyid se estructura de forma apropiada para la nueva ubicación. Un índice único en el tipo de datos hierarchyid puede ayudar a evitar las entradas duplicadas. Para obtener un ejemplo de cómo mover un subárbol completo, vea Trabajar con datos hierarchyid.

Ejemplos

A. Comparar dos ubicaciones de nodo

En el ejemplo siguiente se muestra el identificador hierarchyid actual de un nodo. También se muestra cuál sería el hierarchyid del nodo si este se moviera para convertirse en descendiente del nodo @NewParent. Utiliza el método ToString() para mostrar las relaciones jerárquicas.

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. Actualizar un nodo a una ubicación nueva

En el ejemplo siguiente se utiliza GetReparentedValue() en una instrucción UPDATE para mover un nodo de una ubicación anterior a una ubicación nueva en la jerarquía:

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. Ejemplo de CLR

En el fragmento de código siguiente se llama al método GetReparentedValue ():

this. GetReparentedValue(oldParent, newParent)