Подключение Oracle пунктом, эквивалентным в SQL Server

Есть ли эквивалентный пункт для СОЕДИНЕНИЯ Oracle в SQL Server. Требование для создания дерева категории использование порожденного поля.

5
задан OMG Ponies 3 August 2010 в 04:00
поделиться

2 ответа

В SQL Server 2005+, эквивалентном синтаксису иерархического запроса Oracle CONNECT BY в SQL Server 2005+, используется рекурсивный CTE. В SQL Server 2008 добавлен HierarchyID . Вот пример рекурсивного CTE:

WITH EmployeeHierarchy (EmployeeID, LastName, FirstName, ReportsTo, HierarchyLevel) AS (
   SELECT EmployeeID,
          LastName,
          FirstName,
          ReportsTo,
          1 as HierarchyLevel
     FROM Employees
    WHERE ReportsTo IS NULL
   UNION ALL
   -- Recursive step
   SELECT e.EmployeeID,
          e.LastName,
          e.FirstName,
          e.ReportsTo,
          eh.HierarchyLevel + 1 AS HierarchyLevel
     FROM Employees e
     JOIN EmployeeHierarchy eh ON e.ReportsTo = eh.EmployeeID)
  SELECT *
    FROM EmployeeHierarchy
ORDER BY HierarchyLevel, LastName, FirstName 

Поиск в Google «иерархического CTE» и / или «рекурсивного CTE» даст множество результатов. Я взял пример запроса с 4GuysFromRolla.com .

Рекурсивные CTE теперь являются стандартом ANSI - насколько я понимаю, синтаксис не поддерживался до Oracle 11g.

8
ответ дан 14 December 2019 в 01:07
поделиться

В MS SQL Server 2008 есть HierarchyID тип данных, который может сделать вашу жизнь проще.

1
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: