Condividi tramite


GetReparentedValue (Motore di database)

Restituisce un nodo il cui percorso dalla radice è il percorso a newRoot, seguito dal percorso oldRoot a questo.

Sintassi

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

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

Argomenti

  • oldRoot
    Valore hierarchyid del nodo che rappresenta il livello della gerarchia da modificare.

  • newRoot
    Valore hierarchyid che rappresenta il nodo che sostituirà la sezione oldRoot del nodo corrente per eseguire lo spostamento.

Tipi restituiti

Tipo SQL Server restituito: hierarchyid hierarchyid

Tipo CLR restituito: SqlHierarchyId SqlHierarchyId

Osservazioni

Può essere utilizzato per modificare l'albero spostando nodi da oldRoot in newRoot. GetReparentValue può inoltre essere utilizzato per spostare un nodo di una gerarchia in un nuovo percorso della gerarchia. Il tipo di dati hierarchyid rappresenta la struttura gerarchica, ma non la applica. Gli utenti devono verificare che hierarchyid sia strutturato in modo appropriato per il nuovo percorso. Un indice univoco applicato al di dati hierarchyid può impedire la presenza di voci duplicate. Per un esempio di spostamento di un sottoalbero intero, vedere Utilizzo di dati hierarchyid.

Esempi

A. Confronto tra due percorsi di nodi

Nell'esempio seguente viene illustrato il valore hierarchyid corrente di un nodo. Nell'esempio viene inoltre illustrato il valore hierarchyid del nodo se il nodo fosse spostato in modo da diventare un discendente del nodo @NewParent. Per visualizzare le relazioni gerarchiche, viene utilizzato il metodo ToString().

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. Aggiornamento di un nodo in un nuovo percorso

Nell'esempio seguente viene utilizzato GetReparentedValue() in un'istruzione UPDATE per spostare un nodo da un percorso obsoleto in un nuovo percorso nella gerarchia:

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

Nel frammento di codice seguente viene chiamato il metodo GetReparentedValue ().

this. GetReparentedValue(oldParent, newParent)