Главная страница
    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.041 c
1-1152186760
Oleon
2006-07-06 15:52
2006.08.20
Компонент: панель с кнопками открытых MDI окон.


11-1131518278
algambra
2005-11-09 09:37
2006.08.20
Установка KOL и sys*.dcu


2-1154597818
Jimmy
2006-08-03 13:36
2006.08.20
Ошибка при открытии файла.


4-1144670484
Acidlex
2006-04-10 16:01
2006.08.20
Измерение уровня входного сигнала звуковой карты


2-1154440550
lorn
2006-08-01 17:55
2006.08.20
treview значение узла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский