L'équivalent SQL Server 2005+ de CONNECT BY
d'Oracle syntaxe de requête hiérarchique consiste à utiliser un CTE récursif. SQL Server 2008 a ajouté HierarchyID. Voici un exemple de CTE récursif :
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
Googler "CTE hiérarchique" et/ou "CTE récursif" donnera de nombreux résultats. J'ai pris l'exemple de requête de 4GuysFromRolla.com.
Les CTE récursifs sont désormais la norme ANSI - la syntaxe n'était pas prise en charge avant Oracle 11g, si j'ai bien compris.