Udostępnij za pośrednictwem


GetReparentedValue (Database Engine)

Zwraca węzła, którego ścieżka z katalogu głównego jest ścieżką do newRoot, a po nim ścieżkę od oldRoot Aby to.

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

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

Argumenty

  • oldRoot
    A hierarchyid to jest węzeł, który reprezentuje poziom w hierarchii, który ma zostać zmodyfikowana.

  • newRoot
    A hierarchyid reprezentuje, węzeł, który zastąpi oldRoot sekcja w celu przeniesienia węzła bieżącego węzła.

Zwracane typy

**Zwracany typ programu SQL Server:**hierarchyid

**Zwracany typ CLR:**SqlHierarchyId

Remarks

Służy do modyfikowania drzewa, przesuwając węzłów z oldRoot Aby newRoot. GetReparentedValue można przenieść do nowej lokalizacji w hierarchii węzła hierarchii.The hierarchyid data type represents but does not enforce the hierarchical structure.Użytkownicy muszą zapewnić, że hierarchyid składa się odpowiednio do nowej lokalizacji.Indeks unikatowy oparty na hierarchyid Typ danych może pomóc w zabezpieczeniu zduplikowane wpisy. Przykład przenoszenia całego drzewa podrzędnego można znaleźć w temacie Working with hierarchyid Data.

Przykłady

A.Porównywanie dwóch lokalizacjach, węzeł

W poniższym przykładzie pokazano hierarchyid bieżącego węzła.Pokazuje także co hierarchyid węzeł byłoby Jeśli węzeł zostały przeniesione do obiektu podrzędnego w o stanie @ NewParent węzła.Korzysta on ToString() Metoda do pokazywania relacji hierarchicznych.

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.Uaktualnianie węzła do nowej lokalizacji

W poniższym przykładzie użyto GetReparentedValue() za pomocą instrukcja UPDATE, aby przesunąć węzeł z starej lokalizacji do nowej lokalizacji w hierarchii:

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.Przykład CLR

Następujący kod wywołania fragment GetReparentedValue () Metoda:

this. GetReparentedValue(oldParent, newParent)