Группируйте данные при разделении xml на несколько таблиц в SQL server
-
06-07-2019 - |
Вопрос
Это следует из этого вопроса:
Измените XML в SQL server, чтобы добавить корневой узел
В дополнение к проблеме, поставленной и теперь исправленной в этом вопросе, я также разбиваю существующую таблицу на 2, где 2-я таблица является вложенной таблицей первой, с внешним ключом обратно к первой.
Итак, в настоящее время
table1(ID, col1, col2, col3....coln)
Становится
table1(ID, col1, col2, col3)
и
table2(PK, FK_table1, col4, col5, ...coln)
На данный момент я ничего не удалял из существующей таблицы, просто создал вторую, и я обнаружил ВЫХОДНОЙ СИГНАЛ сконструируйте так, чтобы я мог вставлять в обе таблицы одновременно, включая помещение PK из 1-й таблицы во 2-ю как FK во вставке 1 - так что что-то вроде;
INSERT INTO table1 col1, col2,...etc...
OUTPUT inserted.ID, col1, col2, ....
INTO table2(FK_table1, col1, col2, .... )
Select col.value('node1[1]', 'int') col1,
col.value('node2[1]', 'varchar(50)') col2,
....etc......
FROM @xml.nodes('//Items/Item') doc(col)
Это успешно вставляется в обе таблицы одновременно НО полагается на тот факт, что я еще не удалил столбцы из table1, ** И* приводит к соотношению 1: 1 между таблицами, когда мне нужно, чтобы в table1 были только строки для разных col1, col2, col3, а в table2 содержалась более подробная информация
Мне интересно, правильно ли я поступаю в этом вопросе?Смогу ли я сделать это за 1 запрос или мне придется разбить его на части?Я думаю, может быть, я мог бы сначала разделить xml на table1, затем снова разделить отдельно на table2, присоединившись к table1, чтобы получить FK для вставки?Кто-нибудь делал подобное раньше?
Решение
Да, я проделал подобное и использовал оба предложения в зависимости от того, какую еще работу мне нужно выполнить
Опции:
Преобразуйте XML-файл один раз в переменную tabe ВЫБЕРИТЕ в table1, ВЫБЕРИТЕ в table2 ЗНАЧЕНИЕ, ОТЛИЧНОЕ от указанного
Дважды разрежьте XML-файл.
Я был бы склонен сначала выполнить дорогостоящую операцию (измельчение XML) за один раз.