1
SQL Serverを使用してxml値をテーブルに変換しようとしています。このXML値とSQLクエリからSQLサーバから重複するXMLデータを避ける
、
<ROOT>
<NODE1>
<VALUE>NODE1_VALUE1</VALUE>
</NODE1>
<NODE1>
<VALUE>NODE1_VALUE2</VALUE>
<NODE2>
<VALUE>NODE1_NODE2_VALUE1</VALUE>
</NODE2>
<NODE2>
<VALUE>NODE1_NODE2_VALUE2</VALUE>
</NODE2>
</NODE1>
</ROOT>
SELECT NODE1.C.VALUE('VALUE[1]','VARCHAR(MAX)') NODE1_VALUE
,NODE2.C.VALUE('VALUE[1]','VARCHAR(MAX)') NODE2_VALUE
FROM TABLENAME T
CROSS APPLY T.TEXT.NODES('/ROOT/NODE1') NODE1(C)
CROSS APPLY T.TEXT.NODES('/ROOT/NODE1/NODE2') NODE2(C)
私はこの結果を取得しています、しかし、NODE1_NODE2_VALUE1はNODE1_VALUE1の子ではありません。
NODE1_VALUE NODE2_VALUE
==================================
NODE1_VALUE1 NODE1_NODE2_VALUE1
NODE1_VALUE1 NODE1_NODE2_VALUE2
NODE1_VALUE2 NODE1_NODE2_VALUE1
NODE1_VALUE2 NODE1_NODE2_VALUE2
しかし、次の結果が必要です。この結果を得るためにSQLクエリを変更するにはどうすればよいですか?
NODE1_VALUE NODE2_VALUE
==================================
NODE1_VALUE1 NULL
NODE1_VALUE2 NODE1_NODE2_VALUE1
NODE1_VALUE2 NODE1_NODE2_VALUE2
(OR)
NODE1_VALUE NODE2_VALUE
==================================
NODE1_VALUE2 NODE1_NODE2_VALUE1
NODE1_VALUE2 NODE1_NODE2_VALUE2
というより相互NODE2(C)のテーブルを適用し、最初のノードに適用外。例えば'TABLENAME T CROSSからT.TEXT.nodes( 'ROOT/NODE1')NODE1(C)OUTERがNODE1.C.nodes( 'NODE2')NODE2(C)'を適用します。注:交差適用は2番目の結果を、外側は最初の結果を適用します。 – ZLK
ZLKありがとうございました。正しく動作しました。また、「ノード」と「値」は小文字にする必要があります。 – Jack