Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: 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 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
15-1153609537
Ketmar
2006-07-23 03:05
2006.08.20
сборник стихов Дины Арбениной


15-1153845017
oldman
2006-07-25 20:30
2006.08.20
Как съезжают программисты...


2-1154374453
rem2
2006-07-31 23:34
2006.08.20
Как остановить выполнение процедуры/функции?


2-1154437819
NightAngel
2006-08-01 17:10
2006.08.20
Помогите с пост-запросом


15-1153822612
rll-progr
2006-07-25 14:16
2006.08.20
ddeclientitem