SQL Server 2005+ еквивалент на CONNECT BY
на Oracle йерархичният синтаксис на заявката е да се използва рекурсивен 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, както разбирам.