Рекурсивное выражение 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 для обновления записей на базе рекурсивного запроса UPDATE C SET HierarchyLevel = CTE.Level FROM Customers C, HCustomersCTE CTE WHERE C.Id = CTE.Id