Zmiana kolejności danych w tabeli hierarchiczne hierarchiczne metod
Reorganizowanie hierarchii jest typowe zadanie konserwacji.W tym zadaniu, możemy użyć aktualizacji instrukcja z GetReparentedValue metoda najpierw przenieść do nowej lokalizacji w hierarchii pojedynczego wiersza.Następnie możemy spowoduje przeniesienie całego poddrzewa do nowej lokalizacji.
GetReparentedValue Metoda przyjmuje dwa argumenty.Pierwszy argument opisuje część hierarchii do zmodyfikowania.Na przykład, jeśli hierarchia jest /1/4/2/3/ i chcesz zmienić /1/4/ sekcji, że hierarchia staje się /2/1/2/3/, pozostawiając ostatnich dwóch węzłów (2 i 3/) bez zmian, należy 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 musi zawierać tę samą liczbę poziomów.
Aby przenieść jeden wiersz do nowej lokalizacji w hierarchii
Obecnie Wanida raportów do Sariya.W tej procedurze przeniesieniu z jej bieżącego węzła Wanida /1/1/ , dzięki czemu użytkownik zgłasza Jill.Jej nowy węzeł stanie się /3/1/ , /1/ jest pierwszym argumentem i /3/ jest drugim.Odpowiadają one OrgNode wartości Sariya i Jill.Wykonać następujący kod, aby przenieść Wanida z firmy Sariya organizacji firmy Jill:
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 ; GOWykonać następujący kod, aby zobaczyć wynik:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ; GOWanida jest teraz w węźle /3/1/.
Do reorganizowania części hierarchii
Wykazanie, jak przenieść większej liczby osób, w tym samym czas, najpierw wykonać następujący kod w celu dodawania intern zgłoszenie do Wanida:
EXEC AddEmp 269, 291, 'Kevin', 'Marketing Intern' ; GOTeraz Tomasz raportów do Wanida, Jill, który zgłasza David podwładnych.Oznacza to, że Piotr jest poziom /3/1/1/ .Aby przenieść wszystkie Jill jego podwładnych Nowy Menedżer, firma Microsoft zaktualizuje wszystkie węzły z /3/ jako ich OrgNode nową wartość.Wykonać następujący kod do aktualizacji Wanida sprawozdania Sariya, ale opuszczania Tomasz zgłoszenie do 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 DECLARE children_cursor CURSOR FOR SELECT OrgNode FROM HumanResources.EmployeeOrg WHERE OrgNode.GetAncestor(1) = @OldParent; DECLARE @ChildId hierarchyid; OPEN children_cursor FETCH NEXT FROM children_cursor INTO @ChildId; WHILE @@FETCH_STATUS = 0 BEGIN START: DECLARE @NewId hierarchyid; SELECT @NewId = @NewParent.GetDescendant(MAX(OrgNode), NULL) FROM HumanResources.EmployeeOrg WHERE OrgNode.GetAncestor(1) = @NewParent; UPDATE HumanResources.EmployeeOrg SET OrgNode = OrgNode.GetReparentedValue(@ChildId, @NewId) WHERE OrgNode.IsDescendantOf(@ChildId) = 1; IF @@error <> 0 GOTO START -- On error, retry FETCH NEXT FROM children_cursor INTO @ChildId; END CLOSE children_cursor; DEALLOCATE children_cursor;Wykonać następujący kod, aby zobaczyć wynik:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ; GO
Oto zestaw wyników.
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 były zgłaszane Jill (Wanida i Jan) teraz raporty Sariya.
Dla procedura składowana do reorganizowania sekcji hierarchii zobacz "Przenoszenie poddrzew" sekcja Praca z hierarchyid danych.