Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Внизid @ parent Найти похожие ветки
← →
bon © (2006-06-13 16:11) [0]Есть 2 табл., хранящие древовидные структуры
tab1 (id1 int identity (1,1)
parent1 int,
...............)
tab2 (id2 int identity (1,1)
parent2 int,
.........)
Как выполнить insert из tab1 в tab2 и при этом переприсвоить значения парент"ов
← →
Vlad © (2006-06-13 16:19) [1]
> bon © (13.06.06 16:11)
Если есть foreign key (parent -> id), то можно сделать в два этапа. Сначала insert без parent, потом update поле parent.
← →
stud © (2006-06-13 16:27) [2]наверное делаеш инсерт в табл. 1, после инсерта получаеш новый ид, и смотриш в первой таблице у кого парент=старому ид вставленой записи и делаш апдейт.
← →
Ega23 © (2006-06-13 16:34) [3]tab2 перед операцией заливки данных пустая, или нет?
← →
bon © (2006-06-13 16:37) [4]Ega23 © (13.06.06 16:34) [3]
tab2 не пустая
← →
bon © (2006-06-13 16:40) [5]таб1 хранит шаблоны, которые в дальнейшем использую для inserta в табл2
← →
Ega23 © (2006-06-13 16:50) [6]Тогда - курсор, по-другому - никак. А в самом поганом случае - ещё и рекурсия.
← →
MOA © (2006-06-13 17:11) [7]Можно (а может и лучше) без курсора.
Дла pre-MSSQL2005 - WHILE - ом через временные таблицы - скорее всего будет быстрее чем курсором, такой способ рекомендовался в BOL MSSQL 6.5 (пример назывался "обход дерева", но в BOL для 2000 я его не нашёл ;(). Итераций в WHILE будет столько сколько уровней в дереве, в каждом WHILE - выборка прямых потомков.
Если 2005 - можно ещё красивей, там появились возможности рекурсивных запросов и возврата наборов из INSERT и DELETE.
Удачи!
← →
Ega23 © (2006-06-13 17:15) [8]
> такой способ рекомендовался в BOL MSSQL 6.5 (пример назывался
> "обход дерева", но в BOL для 2000 я его не нашёл ;().
От "листа" к "корню" - безусловно while достаточно. А в обратную сторону - боюсь что нет...
← →
MOA © (2006-06-13 17:18) [9]Согласен. Да, в пре-2005 без курсора не выйдет, действительно ;(. Облажался. Приношу многословные извинения. Погорячился :(.
← →
saxon (2006-06-13 17:45) [10]А как создаються значения id ?
если инкрементом или типа того (т.е. их можно отсортировать по возрастанию), то мне кажеться, все сработает и простым проходом.
← →
saxon (2006-06-13 17:49) [11]Хотя погарячился я. Извините.
Всетаки -> Ega23 © (13.06.06 16:50) [6]
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c