Копирование всей суб-дерево немного проблемы, потому что, когда вы скопировать поддерево вы либо
- денормализации данных или
- , используя его в качестве шаблона некоторых сортов.
В любом случае вы тащите данные через неустойчивое состояние в каком-то момент - что указует на некоторые проблемы с вашим дизайном (например, сделать ваши записи должны иметь несколько родителей или нет, если да, то вам следует рассмотреть вопрос реорганизация?) ,
Итак, вы должны обновить ответ более полным примером того, что вы пытаетесь сделать.
Одним из решений было бы иметь временную таблицу, выбор для вставки не должен быть проблемой, это просто обновление ссылочных идентификаторов, которые будут проблемой.
Так
- с вкладышем в временную таблицу
- UPDATE идентификаторы
- ВСТАВИТЬ в исходную таблицу
- УДАЛЕНИЯ временных записей
Процедура должна идти, как это потому, что он было бы сложно изменить идентификаторы (оба идентификатора записи и идентификатор, относящиеся к родительскому элементу), вначале WITH INSERT. Однако было бы возможно, если бы была хорошая функция, зависящая только от max_id или только от старых идентификаторов.
Ну, я фактически конвертирую мою вложенную модель набора в список смежности, потому что у нас возникают серьезные проблемы с производительностью при вставке узлов (для одной вставки требуется в среднем 50 000 обновлений). – 2010-11-24 13:35:50