Zmiana kolejności danych w tabela hierarchiczna za pomocą metody hierarchiczna
Zmiana hierarchii to typowe zadanie konserwacji.W tym zadaniu zostanie wykorzystany instrukcję UPDATE z GetReparentedValue metoda najpierw przenieść jeden wiersz w nowe miejsce w hierarchii.Następnie całego poddrzewa możemy zostaną przeniesione w nowe miejsce.
The GetReparentedValue metoda takes two arguments. Pierwszy argument opisuje część hierarchii, które można modyfikować.Na przykład, jeśli hierarchia jest / 1/4/2/3 / i chcesz zmienić / 1/4 / sekcji hierarchia staje się / 2/1/2/3 /, pozostawiając ostatnie dwa węzły (2/3 /) bez zmian, musisz podać zmienianie węzłów (/ 1/4 /) jako pierwszy argument.Drugi argument udostępnia nowy poziom hierarchii w naszym przykładzie / 2/1 /.Dwa argumenty nie zawierają tę samą liczbę poziomów.
Aby przenieść jeden wiersz w nowe miejsce w hierarchii
Obecnie Wanida raportów do Sariya.W tej procedurze Przenieś Wanida z jej bieżącego węzła / 1/1 / , tak że tych raportów do Jill.Stanie się jej nowego węzła / 3/1 / so /1/ jest pierwszym argumentem i /3/ jest drugim.Odpowiadają one OrgNode wartości Sariya i Jill.Należy wykonać poniższy kod, aby przenieść Wanida z organizacji firmy Sariya Jill firmy:
DECLARE @CurrentEmployee hierarchyid , @OldParent hierarchyid, @NewParent hierarchyid SELECT @CurrentEmployee = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 269 ; SELECT @OldParent = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 46 ; SELECT @NewParent = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 119 ; UPDATE HumanResources.EmployeeOrg SET OrgNode = @CurrentEmployee. GetReparentedValue(@OldParent, @NewParent) WHERE OrgNode = @CurrentEmployee ; GO
Należy wykonać poniższy kod, aby zobaczyć wynik:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ; GO
Wanida jest teraz w węźle / 3/1 /.
Aby zreorganizować części hierarchii
Wykazać, jak przenieść większej liczby osób w tym samym czasie, najpierw należy wykonać poniższy kod, aby dodać intern raportowania Wanida:
EXEC AddEmp 269, 291, 'Kevin', 'Marketing Intern' ; GO
Teraz Jan raportów do Wanida, która podlega Jill, która podlega David.To oznacza, że Piotr znajduje się poziom / 3/1/1 /.Aby przenieść wszystkie jego Jill podwładnych nowego menedżera, firma Microsoft zaktualizuje wszystkie węzły, które mają /3/ as their OrgNode na nową wartość.Firma Microsoft używa IsDescendantOf Aby przywrócić Jill wszystkich obiektów podrzędnych. Zapamiętywanie Jill się jej obiektu podrzędnego poziom 0, firma Microsoft musi wyłączyć jej)Pole IDPracownika 119) z wierszy, których dotyczy problem.Wykonaj następujący kod w celu zaktualizowania Wanida zgłosić Sariya, ale pozostawieniem Jan raportowania Wanida:
DECLARE @OldParent hierarchyid, @NewParent hierarchyid SELECT @OldParent = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 119 ; -- Jill SELECT @NewParent = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = 46 ; -- Sariya UPDATE HumanResources.EmployeeOrg SET OrgNode = OrgNode. GetReparentedValue(@OldParent, @NewParent) WHERE @OldParent.IsDescendantOf(OrgNode) = 1 AND EmployeeID <> 119 -- This excludes Jill from the move.
Należy wykonać poniższy kod, aby zobaczyć wynik:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ; GO
Here is the result set.
Text_OrgNode OrgNode OrgLevel EmployeeID EmpName Title
------------ ------- -------- ---------- ------- -----------------
/ Ox 0 6 David Marketing Manager
/1/ 0x58 1 46 Sariya Marketing Specialist
/1/1/ 0x5AC0 2 269 Wanida Marketing Assistant
/1/1//2 0x5AD0 3 291 Kevin Marketing Intern
/2/ 0x68 1 271 John Marketing Specialist
/2/1/ 0x6AC0 2 272 Mary Marketing Assistant
/3/ 0x78 1 119 Jill Marketing Specialist
Całe drzewo organizacyjnych, które miały Jill (Wanida i Jan) teraz raportów Sariya.
Dla procedura przechowywana do reorganizowania części hierarchii zobacz sekcję "Przenoszenie poddrzewa" Working with hierarchyid Data.