Поделиться через


Изучение текущей структуры таблицы сотрудников

Образец базы данных AdventureWorks содержит таблицу Employee в схеме HumanResources. Чтобы не изменять исходную таблицу, на этом шаге создается копия таблицы Employee, называющаяся EmployeeDemo. Для упрощения этого примера копируется только пять столбцов из исходной таблицы. Затем выполняется запрос к таблице HumanResources.EmployeeDemo, позволяющий просмотреть структуру данных в таблице без использования типа данных hierarchyid.

Копирование таблицы Employee

  • Запустите следующий код в окне редактора запросов, чтобы скопировать структуру и данные таблицы Employee в новую таблицу EmployeeDemo.

    USE AdventureWorks ;
    GO
    
    SELECT EmployeeID, LoginID, ManagerID, Title, HireDate 
    INTO HumanResources.EmployeeDemo 
    FROM HumanResources.Employee ;
    GO
    

Изучение структуры и данных таблицы EmployeeDemo

  • Новая таблица EmployeeDemo представляет собой типичный пример таблицы в существующей базе данных, которую можно подвергнуть миграции в новую структуру. Запустите следующий код в окне редактора запросов, чтобы увидеть, как таблица использует самосоединение для отображения связей сотрудник-менеджер.

    SELECT 
         Mgr.EmployeeID AS MgrID, Mgr.LoginID AS Manager, 
         Emp.EmployeeID AS E_ID, Emp.LoginID, Emp.Title
    FROM HumanResources.EmployeeDemo AS Emp
    LEFT JOIN HumanResources.EmployeeDemo AS Mgr
    ON Emp.ManagerID = Mgr.EmployeeID
    ORDER BY MgrID, E_ID
    

    Ниже приводится результирующий набор.

    MgrID Manager                 E_ID LoginID                  Title
    NULL NULL                      109 adventure-works\ken0     Chief Executive Officer
    3    adventure-works\roberto0  4   adventure-works\rob0     Senior Tool Designer
    3    adventure-works\roberto0  9   adventure-works\gail0    Design Engineer
    3    adventure-works\roberto0  11  adventure-works\jossef0  Design Engineer
    3    adventure-works\roberto0  158 adventure-works\dylan0   Research and Development Manager
    3    adventure-works\roberto0  263 adventure-works\ovidiu0  Senior Tool Designer
    3    adventure-works\roberto0  267 adventure-works\michael8 Senior Design Engineer
    3    adventure-works\roberto0  270 adventure-works\sharon0  Design Engineer
    6    adventure-works\david0    2   adventure-works\kevin0   Marketing Assistant
    ...
    

    Получаемый в результате набор содержит 290 строк.

Обратите внимание, что использование предложения ORDER BY приводит к тому, что прямые подчиненные каждого уровня управления будут находиться вместе. Например, все семь прямых подчиненных уровня MgrID 3 (roberto0) перечисляются вместе. Сгруппировать всех косвенных подчиненных уровня MgrID 3 тоже возможно, хотя это гораздо сложнее.

В следующей задаче мы создадим новую таблицу с типом данных hierarchyid и переместим в нее данные.