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