Группировать данные при измельчении xml на несколько таблиц на SQL-сервере - PullRequest
0 голосов
/ 09 марта 2009

Это следует из этого вопроса:
Изменить XML на сервере SQL, чтобы добавить корневой узел

В дополнение к проблеме, поставленной и решаемой в этом вопросе, я также делю существующую таблицу на 2, где 2-я таблица - это дополнительная таблица первой с внешним ключом обратно к первой.

Так что в настоящее время

table1(ID, col1, col2, col3....coln)

становится

table1(ID, col1, col2, col3)

и

table2(PK, FK_table1, col4, col5, ...coln)

На данный момент я ничего не удалил из существующей таблицы, просто создал вторую и обнаружил конструкцию OUTPUT , чтобы можно было сразу вставлять в обе таблицы, включая помещение 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, ** AND * приводит к соотношению 1: 1 между таблицами, когда что Мне нужно, чтобы в table1 просто были строки для различных col1, col2, col3, а в table2 содержится более подробная информация

Мне интересно, правильно ли я поступлю? Я собираюсь быть в состоянии сделать это в 1 запросе, или я собираюсь сломать это? Я думаю, может быть, я мог бы сначала уничтожить xml в table1, а затем снова отдельно в table2, присоединившись к table1, чтобы получить FK для вставки? Кто-нибудь делал такие вещи раньше?

1 Ответ

0 голосов
/ 09 марта 2009

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

Опции:

  1. Разрежьте XML один раз в переменную табе ВЫБЕРИТЕ DISTINCT из этого в table1, ВЫБЕРИТЕ в table2

  2. Измельчите XML дважды.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...