L'equivalente SQL Server 2005+ di CONNECT BY
di Oracle la sintassi della query gerarchica consiste nell'utilizzare un CTE ricorsivo. SQL Server 2008 ha aggiunto HierarchyID. Ecco un esempio di CTE ricorsivo:
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
Cercare su Google "CTE gerarchico" e/o "CTE ricorsivo" darà numerosi risultati. Ho preso la query di esempio da 4GuysFromRolla.com.
I CTE ricorsivi ora sono standard ANSI:la sintassi non era supportata fino a Oracle 11g da quanto ho capito.