Рекурсивное выражение 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