Есть ли эквивалентный пункт для СОЕДИНЕНИЯ Oracle в SQL Server. Требование для создания дерева категории использование порожденного поля.
В 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.
В MS SQL Server 2008 есть HierarchyID тип данных, который может сделать вашу жизнь проще.