Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
1-1152023599
DancerMan
2006-07-04 18:33
2006.08.20
Не запускается exe-шник


15-1153466181
Ламот
2006-07-21 11:16
2006.08.20
GPS карты (в частности Европы)


2-1154417827
elysee
2006-08-01 11:37
2006.08.20
Запрос


2-1154254593
Destroyer
2006-07-30 14:16
2006.08.20
Переменные среды (%UserProfile%)


2-1154588715
Zilog
2006-08-03 11:05
2006.08.20
PostMessage(Edit.Handle,WM_KEYDOWN,code,0);




   Наверх