Реферат: Иерархические справочники с линейным временем доступа
DECLARE @ParentPath VARCHAR(180)
BEGIN
SELECT @ParentPath=Path FROM deleted
DELETE FROM DEPARTMENT WHERE Path LIKE @ParentPath+'.%'
END
В этом случае можно гарантировать, что узел будет удаляться вместе с дочерними элементами, и команда удаления еще более упростится.
DELETE FROM DEPARTMENT WHERE Path='1.1' |
Перенос узла
Перенос узла – более сложная операция, чем предыдущая. Для нее нужно будет выполнить две команды обновления. Например, перенесем узел с Path 1.1, сделав его дочерним узлом по отношению к узлу 1.2. Первой командой мы перенесем сам узел:
UPDATE DEPARTMENT SET Path = (SELECT '1.2.' + ISNULL(CAST(MAX(D.Position) + 1 AS VARCHAR), '1') FROM DEPARTMENT D WHERE D.Path LIKE '1.2.%' AND D.Path NOT LIKE '1.2.%.%'), Position = (SELECT ISNULL(MAX(D.Position) + 1, '1') FROM DEPARTMENT D WHERE D.Path LIKE '1.2.%' AND D.Path NOT LIKE '1.2.%.%') WHERE Path = '1.1' |
Второй командой мы обновим все идентификаторы Path для дочерних элементов:
UPDATE DEPARTMENT SET Path=STUFF(Path, 1, 3, '1.2.4') WHERE Path LIKE '1.1.%' |
Так же, как и в случае с удалением, мы можем построить триггер, который будет гарантированно адаптировать дочерние ссылки, а также следить за правильностью поля Position:
CREATE TRIGGER UPDATE_NODES_TR ON DEPARTMENT AFTER UPDATE AS DECLARE @OldParentPath VARCHAR(180), К-во Просмотров: 273
Бесплатно скачать Реферат: Иерархические справочники с линейным временем доступа
|