Compartir vía


GetReparentedValue (motor de base de datos)

se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL Database en Microsoft Fabric

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

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. Reemplace la sección oldRoot del nodo actual para mover el nodo.

Tipos de valor devuelto

Tipo de valor devuelto de SQL Server: hierarchyid

Tipo devuelto de CLR: SqlHierarchyId

Observaciones

Se usa para modificar el árbol, de forma que los nodos se mueven de oldRoot a newRoot. GetReparentedValue se usa para mover un nodo de la jerarquía a una nueva ubicación de 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, consulte Datos jerárquicos (SQL Server).

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 valor de 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 siguiente fragmento de código se llama al método GetReparentedValue():

this. GetReparentedValue(oldParent, newParent)  

Consulte también

Referencia de los métodos del tipo de datos hierarchyid
Datos jerárquicos (SQL Server)
hierarchyid (Transact-SQL)