Дано:
*бинарное(у одного узла от 0 до 2 потомков) дерево вида:
1
/ \
2 3
/ \ \...
4 5
... ...
ну и так далее.
*дерево описывается таблицей вида:
id(ключ)- идентификатор узла сети.
parentid — идентификатор узла являющегося родителем для данного.
level — номер уровня узла от самой первой ячейки.
*т.е. к примеру, для нарисованного выше дерева таблица выглядит так:
1 0 1
2 1 2
3 1 2
4 2 3
5 2 3
Задача: написать оптимальный код на T-SQL, который заполнял бы колонку level, при условии что ее предварительно сбрасывают в 0.
Вариант с рекурсией красив, но не подходит — уровень вложения процедур не позволяет.
спасибо.
Здравствуйте, _Anri_, Вы писали:
_A_>Дано:
_A_>*бинарное(у одного узла от 0 до 2 потомков) дерево вида:
_A_>_A_> 1
_A_> / \
_A_> 2 3
_A_> / \ \...
_A_> 4 5
_A_> ... ...
_A_>
_A_>ну и так далее.
_A_>Задача: написать оптимальный код на T-SQL, который заполнял бы колонку level, при условии что ее предварительно сбрасывают в 0.
update treeNode set level=1 where parentID = 0
while @@rowcount > 0
update treeNode set level = p.level+1 from treeNode inner join treeNode p on treeNode.parentId = p.id where treeNode.level = 0 and p.Level > 0
... << RSDN@Home 1.1.4 beta 5 rev. 395>>