Вниз
Скачать: 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.025 c
4-1145936912
Бабайка
2006-04-25 07:48
2006.08.20
Защита программы: как запустить приложение из памяти?


2-1154375035
Damager
2006-07-31 23:43
2006.08.20
Дочерние формы. Прорисовка.


15-1153768987
Ketmar
2006-07-24 23:23
2006.08.20
навеяно языком Petrovich


3-1150448620
sid_m
2006-06-16 13:03
2006.08.20
Удаленный вызов хранимой процедуры


15-1153330577
Nic
2006-07-19 21:36
2006.08.20
Музыка




   Наверх