SQL Server 2005+ tương đương với CONNECT BY
của Oracle cú pháp truy vấn phân cấp là sử dụng một CTE đệ quy. SQL Server 2008 đã thêm HierarchyID. Đây là một ví dụ về CTE đệ quy:
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
Googling "CTE phân cấp" và / hoặc "CTE đệ quy" sẽ trả về nhiều kết quả. Tôi lấy truy vấn ví dụ từ 4GuysFromRolla.com.
CTE đệ quy hiện là tiêu chuẩn ANSI - cú pháp không được hỗ trợ cho đến khi Oracle 11g như tôi hiểu.