XMLをSQLサーバーの複数のテーブルに細断するときのデータのグループ化

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

質問

これは、この質問から続きます。
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を取得できると考えていますか?誰も以前にこのようなことをしましたか?

役に立ちましたか?

解決

はい、似たようなことを行っており、他に行う必要がある作業に応じて両方の提案を使用しました

オプション:

  1. XMLをタブ変数に1回シュレッドします SELECT DISTINCTからそれをtable1に、SELECT into table2

  2. XMLを2回シュレッドします。

最初に高価な操作(XMLの断片化)を一度に実行したいと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top