Frage

Dies ergibt sich aus dieser Frage auf:
Ändern von XML in SQL Server einen Stammknoten hinzufügen

Neben das Problem gestellt und jetzt in dieser Frage festgelegt, ich Aufspalten auch die vorhandene Tabelle in 2, wobei die zweite Tabelle eine Untertabelle der ersten ist, mit einem Fremdschlüssel zurück zum ersten.

So aktuell

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

immer

table1(ID, col1, col2, col3)

und

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

Im Moment habe ich nichts mehr von der vorhandenen Tabelle entfernt haben, erstellt nur die zweite, und ich habe die OUTPUT entdeckt konstruieren, so dass ich in beiden Tabellen auf einmal einfügen können, einschließlich der Umsetzung PK der ersten Tabelle in die zweiten als FK in dem 1 Einsatz - so etwas wie;

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)

Das fügt erfolgreich in beiden Tabellen auf einmal ABER beruht auf der Tatsache, habe ich nicht die Spalten aus table1 entfernt noch ** UND * Ergebnissen in einer 1: 1-Beziehung zwischen den Tabellen, wenn was ich brauche, ist für tabelle1 nur Zeilen für verschiedene col1 haben, col2, col3, mit table2 die ausführlichere Informationen halten

Ich frage mich, wenn ich über das den richtigen Weg werde? Werde ich in der Lage sein, dies in 1 Abfrage zu tun, oder werde ich es brechen? Ich denke, vielleicht könnte ich die xml zuerst in table1 zerkleinere, fetzte dann wieder separat in Tabelle 2, auf tabelle1 Verbinden den FK für den Einsatz zu bekommen? Jeder, der diese Art der Sache vorher getan?

War es hilfreich?

Lösung

Ja, ich getan ähnlich und beide Vorschläge verwendet je nachdem, welche andere Arbeit, die ich tun müssen, um

Optionen:

  1. Shred die XML einmal in eine tabe Variable SELECT DISTINCT aus, dass in Tabelle 1, SELECT in table2

  2. Shred die XML zweimal.

würde ich geneigt sein, um den teure Operation (Schredder XML) zu tun, zuerst in einem Rutsch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top