XMLをSQLサーバーの複数のテーブルに細断するときのデータのグループ化
-
06-07-2019 - |
質問
これは、この質問から続きます。
SQLサーバーのXMLを変更してルートノードを追加
この質問で提起され修正された問題に加えて、既存のテーブルを2に分割します。2番目のテーブルは最初のサブテーブルで、外部キーは最初に戻ります。
そのため
table1(ID, col1, col2, col3....coln)
なりつつある
table1(ID, col1, col2, col3)
and
table2(PK, FK_table1, col4, col5, ...coln)
現時点では、既存のテーブルから何も削除せず、2番目のテーブルを作成し、 OUTPUT 構造を発見したため、両方のテーブルに一度に挿入できます。 1番目のテーブルのPKを1番目の挿入のFKとして2番目に挿入-のようなもの;
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から列をまだ削除していないという事実に依存しています。必要なのは、table1が個別のcol1、col2、col3の行を持ち、table2がより詳細な情報を保持することです
これを正しい方法で行っているのだろうか?これを1つのクエリで実行できますか、それとも分割する必要がありますか? xmlを最初にtable1に細断処理し、次にtable2に個別に細断処理して、table1に結合して挿入のFKを取得できると考えていますか?誰も以前にこのようなことをしましたか?
解決
はい、似たようなことを行っており、他に行う必要がある作業に応じて両方の提案を使用しました
オプション:
-
XMLをタブ変数に1回シュレッドします SELECT DISTINCTからそれをtable1に、SELECT into table2
-
XMLを2回シュレッドします。
最初に高価な操作(XMLの断片化)を一度に実行したいと思います。
所属していません StackOverflow