WHERE Path LIKE '1.1.%' AND Path NOT LIKE '1.1.%.%'
ПРЕДУПРЕЖДЕНИЕ
В многопользовательской
среде, для некоторых баз данных, таких, как MSSQL, подобное добавление
является классическим случаем фантома. Чтобы преодолеть данную проблему, можно повысить уровень транзакции до Serializable, использовать в качестве
поля Position автоинкрементальное поле или просто учитывать, что можно
получить ошибку при вставке одинаковых значений в уникальный индекс поля
Path.
Удаление узла с потомками
Удаление похоже на операцию выборки за исключением
того, что мы также должны удалить текущий узел:
DELETE FROM DEPARTMENT
WHERE Path LIKE '1.1%'
С помощью дополнительной точки в аргументе оператора
LIKE можно удалить все дочерние элементы без родительского узла:
DELETE
FROM DEPARTMENT
WHERE
Path LIKE '1.1.%'
Имеет смысл построить триггер, который будет
автоматически удалять дочерние элементы:
CREATE TRIGGER DELETE_NODES_TR
ON DEPARTMENT AFTER DELETE
AS
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. Первой командой
мы перенесем сам узел:
Рекомендуем скачать другие рефераты по теме: сочинение рассуждение на тему, уголовное право шпаргалки.