Рекурсивное выражение CTE в SQL Server 2005, которое запрашивает иерархические данные
WITH HCustomersCTE (Id, ParentId, _
 Name, Level)
AS
(
 — Определение якорного члена 
 SELECT C.Id, C.ParentId, C.Name, _
 0 AS Level
 FROM Customers C
 WHERE ParentId IS NULL
 UNION ALL
 — Определение рекурсивного члена 
 SELECT ChildC.Id, ChildC.ParentId, _
 ChildC.Name, Level + 1
 FROM Customers ChildC
 INNER JOIN HCustomersCTE _
 ParentC ON (ParentC.Id = _
 ChildC.ParentId)
)
— Применение CTE для рекурсивной выборки результатов 
SELECT Id, ParentId, Name, Level
 FROM HCustomersCTE

Поделитесь материалом с коллегами и друзьями