Udostępnij za pośrednictwem


Populating a Table with Existing Hierarchical Data

To zadanie tworzy nową tabela i wypełnia ją z danymi w HumanResources.EmployeeDemo tabela.To zadanie ma następujące czynności:

  • Utwórz nową tabela, która zawiera hierarchyid Kolumna. W tej kolumnie można zastąpić istniejącego pliku Pole IDPracownika and ManagerID kolumna.Jednak zachowa tych kolumn.Wynika to z istniejących aplikacji, może odnosić się do tych kolumn, a także ułatwić zrozumienie danych po przeniesieniu.Określa, że definicja tabela OrgNode jest klucz podstawowy, co wymaga kolumna, aby zawierać wartości unikatowe.Indeks klastrowany na OrgNode kolumna będą przechowywane data w OrgNode sekwencji.

  • Tworzenie tabela tymczasowa, który jest używany do śledzenia liczby pracowników raport bezpośrednio do każdego menedżera.

  • Nowa tabela należy wypełnić przy użyciu danych z HumanResources.EmployeeDemo tabeli.

Aby utworzyć nową tabela o nazwie NewOrg

  • W oknie Edytora kwerend uruchom poniższy kod, aby utworzyć nową tabela o nazwie HumanResources.NewOrg:

    USE AdventureWorks ;
    GO
    
    CREATE TABLE HumanResources.NewOrg
    (
      OrgNode hierarchyid,
      EmployeeID int,
      LoginID nvarchar(50),
      ManagerID int, 
      Title nvarchar(100), 
      HireDate datetime
    CONSTRAINT PK_NewOrg_OrgNode
      PRIMARY KEY CLUSTERED (OrgNode)
    )
    GO
    

Aby utworzyć tabela tymczasowa o nazwie #Children

  1. Utwórz tabela tymczasowa nazwane Liczba dzieci z kolumną o nazwie Liczba , zawierające liczby dzieci dla każdego węzła:

    CREATE TABLE #Children 
       (
        EmployeeID int,
        ManagerID int,
        Num int
    )
    GO
    
  2. Dodawanie indeksu, który będzie znacznie przyspieszyć kwerendę, która wypełnia NewOrg tabela:

    CREATE CLUSTERED INDEX tmpind ON #Children(ManagerID, EmployeeID)
    GO
    

Aby wypełnić tabela NewOrg

  1. Kwerendy cykliczne Zabroń podkwerend z agregatów.Zamiast tego należy wypełnić Liczba dzieci następujący kod, który używa tabelaROW_NUMBER() Metoda zapełnićLiczba kolumna:

    INSERT #Children (EmployeeID, ManagerID, Num)
    SELECT EmployeeID, ManagerID,
      ROW_NUMBER() OVER (PARTITION BY ManagerID ORDER BY ManagerID) 
    FROM HumanResources.EmployeeDemo
    GO
    
  2. Przegląd Liczba dzieci tabela.Uwaga jak Liczba kolumna zawiera kolejne numery dla każdego menedżera.

    SELECT * FROM #Children ORDER BY ManagerID, Num
    GO
    

    Here is the result set.

    EmployeeID ManagerID Num
    ---------- --------- ---
    109        NULL      1
    4          3         1
    9          3         2
    11         3         3
    158        3         4
    
    271        6         1
    272        6         2
    
  3. Wypełnianie HumanResources.NewOrg tabela.Użycie GetRoot i ToString metody, aby złączyć Liczba wartości do hierarchyid można sformatować, a następnie zaktualizować OrgNode kolumna z wynikowej wartości hierarchiczne:

    WITH paths(path, EmployeeID) 
    AS (
    -- This section provides the value for the root of the hierarchy
    SELECT hierarchyid::GetRoot() AS OrgNode, EmployeeID 
    FROM #Children AS C 
    WHERE ManagerID IS NULL 
    
    UNION ALL 
    -- This section provides values for all nodes except the root
    SELECT 
    CAST(p.path.ToString() + CAST(C.Num AS varchar(30)) + '/' AS hierarchyid), 
    C.EmployeeID
    FROM #Children AS C 
    JOIN paths AS p 
       ON C.ManagerID = P.EmployeeID 
    )
    INSERT HumanResources.NewOrg (OrgNode, O.EmployeeID, O.LoginID, O.ManagerID, O.Title, O.HireDate)
    SELECT P.path, O.EmployeeID, O.LoginID, O.ManagerID, O.Title, O.HireDate
    FROM HumanResources.EmployeeDemo AS O 
    JOIN Paths AS P 
       ON O.EmployeeID = P.EmployeeID
    GO
    
  4. A hierarchyid Kolumna jest bardziej zrozumiały po przekonwertowaniu do formatu znaków. Przejrzyj dane w HumanResources.NewOrg wykonywanie następujący kod, który zawiera dwa reprezentacje tabelaOrgNode kolumna:

    SELECT OrgNode.ToString() AS LogicalNode, * 
    FROM HumanResources.NewOrg 
    ORDER BY LogicalNode;
    GO
    

    The LogicalNode kolumna converts the hierarchyid kolumna into a more readable text form that represents the hierarchy. W pozostałych zadań używane ToString() metoda, aby wyświetlić format logiczny hierarchyid kolumny.

  5. Usuwanie tymczasowej tabela, która nie jest potrzebna:

    DROP TABLE #Children
    GO
    

Kolejnym zadaniem będzie utworzyć indeksy do obsługi hierarchiczną strukturę.

Keyboard Shortcuts in Reporting Services

Optimizing the NewOrg Table