Udostępnij za pośrednictwem


Populating a Hierarchical Table Using Hierarchical Methods

AdventureWorks ma 8 pracowników w dziale marketingu.Hierarchia pracownika wygląda następująco:

David, Pole IDPracownika 6, jest Menedżer marketingu.Trzy Specialists Marketing raportu David:

  • Sariya, Pole IDPracownika 46

  • Jan, Pole IDPracownika 271

  • Jill, Pole IDPracownika 119

Asystent obrotu Wanida (Pole IDPracownika 269), raportySariyai Asystent Marketing Anna (Pole IDPracownika 272), raportyJan.

Aby wstawić katalog główny drzewa hierarchii

  1. W poniższym przykładzie wstawia David menedżera marketingu do tabela w katalogu głównym w hierarchii.The OrdLevel column is a kolumna obliczana.Dlatego nie jest częścią instrukcja INSERT.To pierwszy rekord jest umieszczany w GetRoot() metoda wypełnić to pierwszy rekord w hierarchii znajduje się katalog główny.

    INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title)
    VALUES (hierarchyid::GetRoot(), 6, 'David', 'Marketing Manager') ;
    GO
    
  2. Wykonaj następujący kod w celu zbadania początkowych wierszy w tabela:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode, OrgLevel, EmployeeID, EmpName, Title 
    FROM HumanResources.EmployeeOrg ;
    

    Here is the result set.

    Text_OrgNode OrgNode OrgLevel EmployeeID EmpName Title
    ------------ ------- -------- ---------- ------- -----------------
    /            Ox      0        6          David   Marketing Manager
    

Podobnie jak w poprzedniej lekcji używamy ToString() Metoda konwersji hierarchyid Typ danych do formatu, który jest łatwo zrozumiały.

Aby wstawić podrzędny pracownika

  1. Sariya zgłasza David.Aby wstawić Sariya firmy , węzeł, należy utworzyć odpowiednie OrgNode wartości danych, należy wpisaćhierarchyid. Następujący kod tworzy zmienną typu danych hierarchyid i wypełnia ją z głównym OrgNode wartości w tabela. Then uses that variable with the GetDescendant() method to insert row that is a subordinate node.GetDescendant takes two arguments.Przejrzyj następujące opcje dla wartości argumentu:

    • Jeśli nadrzędny ma wartość NULL, GetDescendant Zwraca wartość NULL.

    • Jeśli element nadrzędny nie jest NULL, a child1 i child2 są wartości NULL, GetDescendant Zwraca element podrzędność obiektu nadrzędnego.

    • Jeśli nadrzędny i child1 nie jest NULL, a child2 ma wartość NULL, GetDescendant Zwraca wartość większą niż child1 element podrzędność obiektu nadrzędnego.

    • Jeśli nadrzędny i child2 nie są wartości NULL i child1 ma wartość NULL, GetDescendant mniej niż child2 zwraca element podrzędność obiektu nadrzędnego.

    • W przypadku obiektu nadrzędnego, child1 i child2 wszystkie nie jest NULL, GetDescendant Zwraca element podrzędność obiektu nadrzędnego, większa child1 i mniejsza niż child2.

    Następujący kod używa (NULL, NULL) argumenty głównego po obiekcie nadrzędnym, ponieważ nie ma jeszcze żadnych wierszy w tabela, z wyjątkiem katalogu głównego. wykonać następujący kod do wstawienia Sariya:

    DECLARE @Manager hierarchyid 
    SELECT @Manager = hierarchyid::GetRoot()
    FROM HumanResources.EmployeeOrg ;
    
    INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title)
    VALUES
    (@Manager.GetDescendant(NULL, NULL), 46, 'Sariya', 'Marketing Specialist') ; 
    
  2. Powtórz kwerendy z pierwszej procedury wyszukiwania w tabela i sprawdzić, w jaki sposób są wyświetlane wpisy:

    SELECT OrgNode.ToString() AS Text_OrgNode, 
    OrgNode, OrgLevel, EmployeeID, EmpName, Title 
    FROM HumanResources.EmployeeOrg ;
    

    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
    

Aby utworzyć procedury umożliwiające wprowadzanie nowych węzłów

  1. Aby uprościć wprowadzanie danych, utwórz następujące przechowywane procedury, aby dodać pracownika do EmployeeOrg tabela.Procedura akceptuje wartości wejściowych informacje o dodawaniu pracownika.Obejmuje to Pole IDPracownika nowego pracownika kierownika, nowy pracownik Pole IDPracownika numer oraz ich imienia i tytuł.Procedura wykorzystuje GetDescendant() a także GetAncestor() metoda.wykonać następujący kod do procedury tworzenia:

    CREATE PROC AddEmp(@mgrid int, @empid int, @e_name varchar(20), @title varchar(20)) 
    AS 
    BEGIN
       DECLARE @mOrgNode hierarchyid, @lc hierarchyid
       SELECT @mOrgNode = OrgNode 
       FROM HumanResources.EmployeeOrg 
       WHERE EmployeeID = @mgrid
       SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
       BEGIN TRANSACTION
          SELECT @lc = max(OrgNode) 
          FROM HumanResources.EmployeeOrg 
          WHERE OrgNode.GetAncestor(1) =@mOrgNode ;
    
          INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title)
          VALUES(@mOrgNode.GetDescendant(@lc, NULL), @empid, @e_name, @title)
       COMMIT
    END ;
    GO
    
  2. W następującym przykładzie dodano pozostałych 4 pracowników, którzy podlegają bezpośrednio lub pośrednio David.

    EXEC AddEmp 6, 271, 'John', 'Marketing Specialist' ;
    EXEC AddEmp 6, 119, 'Jill', 'Marketing Specialist' ;
    EXEC AddEmp 46, 269, 'Wanida', 'Marketing Assistant' ;
    EXEC AddEmp 271, 272, 'Mary', 'Marketing Assistant' ;
    
  3. Ponownie, wykonaj następującą kwerendę Sprawdź w wierszach EmployeeOrg tabela:

    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
    /2/          0x68    1        271        John    Marketing Specialist
    /2/1/        0x6AC0  2        272        Mary    Marketing Assistant
    /3/          0x78    1        119        Jill    Marketing Specialist
    

W tabela teraz zostanie całkowicie wypełniony z organizacji Marketing.

Keyboard Shortcuts in Reporting Services

Querying a Hierarchical Table Using Hierarchy Methods