O equivalente do SQL Server 2005+ ao
CONNECT BY
da Oracle sintaxe de consulta hierárquica é usar um CTE recursivo. O SQL Server 2008 adicionou HierarchyID. Aqui está um exemplo de uma CTE recursiva: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
Pesquisando "CTE hierárquico" e/ou "CTE recursivo" no Google, você encontrará vários resultados. Peguei a consulta de exemplo do 4GuysFromRolla.com.
CTEs recursivos agora são padrão ANSI - a sintaxe não era suportada até o Oracle 11g, pelo que entendi.