Код, итеративно обновляющий уровни иерархии в таблице товаров 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