Udostępnij za pośrednictwem


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

  1. 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
    
  2. 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

  1. 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
    
  2. 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.
    
  3. 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.

Keyboard Shortcuts in Reporting Services

Podsumowanie: Zarządzanie danymi w tabela hierarchiczna