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