Regrouper les données lors de la destruction de XML en plusieurs tables dans SQL Server

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

Question

Cela découle de cette question:
Modifier XML dans le serveur SQL pour ajouter un nœud racine

En plus du problème posé et maintenant résolu dans cette question, je divise également la table existante en 2, la seconde table étant une sous-table de la première, avec une clé étrangère renvoyant à la première.

Donc actuellement

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

devient

table1(ID, col1, col2, col3)

et

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

Pour l'instant, je n'ai rien supprimé de la table existante, je viens de créer la seconde et j'ai découvert la construction OUTPUT afin de pouvoir l'insérer dans les deux tables à la fois, notamment en plaçant le PK de la 1ère table dans la 2ème comme FK dans le 1 insert - donc quelque chose comme:

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)

Cette insertion réussie dans les deux tables à la fois MAIS repose sur le fait que je n'ai pas encore supprimé les colonnes de la table1, ** AND * entraîne une relation 1: 1 entre les tables, lorsque ce dont j'ai besoin, c’est que table1 ne contienne que des lignes pour col1, col2, col3, avec table2 contenant les informations plus détaillées

Je me demande si j'y vais de la bonne façon? Est-ce que je vais pouvoir le faire en une requête ou est-ce que je vais devoir la décomposer? Je pense que je pourrais peut-être déchiqueter XML d'abord en table1, puis de nouveau séparément en table2, en se joignant à table1 pour obtenir le FK pour l'insertion? Quelqu'un a déjà fait ce genre de chose avant?

Était-ce utile?

La solution

Oui, j'en ai fait de même et j'ai utilisé les deux suggestions en fonction des tâches que je devais effectuer

Options:

  1. Shred le XML une fois en une variable tabe SELECT DISTINCT à partir de cela dans table1, SELECT dans table2

  2. Détruisez le XML deux fois.

Je serais enclin à faire l'opération coûteuse (déchiquetage de XML) en une fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top