Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.048 c
2-1154019946
zhekacoder
2006-07-27 21:05
2006.08.20
Что такое pointer


15-1153718947
Ega23
2006-07-24 09:29
2006.08.20
С Днём рождения! 22 июля


15-1153722652
Yuri Btr
2006-07-24 10:30
2006.08.20
Как создать компонент SysTreeView32+SysListView32


6-1144122492
V-A-V
2006-04-04 07:48
2006.08.20
Проверка соеденения через ADSL модем


1-1152014326
race1
2006-07-04 15:58
2006.08.20
TXMLDocument проблемы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский