Het SQL Server 2005+ equivalent van Oracle's CONNECT BY
hiërarchische querysyntaxis is om een recursieve CTE te gebruiken. SQL Server 2008 hiërarchie-ID toegevoegd. Hier is een voorbeeld van een recursieve 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
Googlen op "hiërarchische CTE" en/of "recursieve CTE" levert tal van resultaten op. Ik nam de voorbeeldquery van 4GuysFromRolla.com.
Recursieve CTE's zijn nu ANSI-standaard - de syntaxis werd niet ondersteund tot Oracle 11g, zoals ik begrijp.