Код, итеративно обновляющий уровни иерархии в таблице товаров Products
— Инициализация всех строк таблицы 
UPDATE Products
 SET HierarchyLevel = NULL

— Создание якоря: обновить самые верхние строки
UPDATE Products
 SET HierarchyLevel = 1
 WHERE ParentId IS NULL

— Итеративное обновление нижних уровней 
DECLARE @CurrentHierarchyLevel AS _
 smallint
DECLARE @NumOfRecordsUpdated AS int

SELECT @CurrentHierarchyLevel = 1
SELECT @NumOfRecordsUpdated = 1
— Проверка начала итерации 

WHILE ((@CurrentHierarchyLevel < 255)
— Проверка отсутствия бесконечного цикла 
 AND (@NumOfRecordsUpdated > 0))
— прекращение итерации при отсутствии изменений 
 BEGIN
 UPDATE T1
 SET HierarchyLevel = _
 @CurrenthierarchyLevel + 1
 FROM Products PChild,
 Products PParent
 WHERE PChild.ParentId = _
 PParent.Id
 AND PParent.HierarchyLevel = _
 @CurrentHierarchyLevel

 — Получение количества записей, измененных при обновлении 
 SELECT @NumOfRecordsUpdated = _
 @@RowCount
 SELECT @CurrentHierarchyLevel = _
 @CurrentHierarchyLevel + 1
 END — WHILE

END

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