Partilhar via


GetReparentedValue (Mecanismo de Banco de Dados)

Retorna um nó cujo caminho da raiz é o caminho para newRoot, seguido pelo caminho de oldRoot para this.

Sintaxe

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

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

Argumentos

  • oldRoot
    Um hierarchyid que é o nó que representa o nível da hierarquia que será modificada.

  • newRoot
    Um hierarchyid que representa o nó que substituirá a seção oldRoot do nó atual para mover o nó.

Tipos de retorno

Tipo de retorno do SQL Server:hierarchyidhierarchyid

Tipo de retorno CLR:SqlHierarchyIdSqlHierarchyId

Comentários

Pode ser usado para modificar a árvore movendo nós de oldRoot para newRoot. GetReparentedValue pode ser usado para mover um nó de uma hierarquia para um local novo na hierarquia. O tipo de dados hierarchyid representa mas não impõe a estrutura hierárquica. Os usuários devem assegurar-se de que o hierarchyid está estruturado adequadamente para o local novo. Um índice exclusivo no tipo de dados hierarchyid pode ajudar prevenir entradas duplicadas. Para obter um exemplo de movimentação de uma subárvore inteira, consulte Trabalhando com dados hierarchyid.

Exemplos

A. Comparando dois locais de nó

O exemplo seguinte mostra o hierarchyid atual de um nó. Ele também mostra o que o hierarchyid do nó seria se o nó fosse movido para se tornar um descendente do nó @NewParent. Ele usa o método ToString() para mostrar as relações hierá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. Atualizando um nó para um local novo

O exemplo a seguir usa GetReparentedValue() em uma instrução UPDATE para mover um nó de um local antigo para um novo local na hierarquia:

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

O trecho de código a seguir chama o método GetReparentedValue ():

this. GetReparentedValue(oldParent, newParent)