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)