Группируйте данные при разделении xml на несколько таблиц в SQL server

StackOverflow https://stackoverflow.com/questions/626622

Вопрос

Это следует из этого вопроса:
Измените 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 для вставки?Кто-нибудь делал подобное раньше?

Это было полезно?

Решение

Да, я проделал подобное и использовал оба предложения в зависимости от того, какую еще работу мне нужно выполнить

Опции:

  1. Преобразуйте XML-файл один раз в переменную tabe ВЫБЕРИТЕ в table1, ВЫБЕРИТЕ в table2 ЗНАЧЕНИЕ, ОТЛИЧНОЕ от указанного

  2. Дважды разрежьте XML-файл.

Я был бы склонен сначала выполнить дорогостоящую операцию (измельчение XML) за один раз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top