MSSQLデータベースのXMLフィールド/テーブルに多数の大きなXMLファイルをロードしました。私のテーブル(XMLImport)には2つのカラムがあります。 ID列とXMLファイルのXMLColumnというラベルの付いた第2列。私は今、データベースのさまざまな場所にロードできるように、そのデータから特定の要素を取得する必要があります。私は以下のXMLファイルの基本フォーマットを含んでいます。要素、サブ要素、およびサブブロックの数は、ファイルごとに異なります。XQueryで未知数の子要素と孫要素
<root>
<data1>apples</data1>
<data2>pears</data2>
<data3>coconuts</data3>
<element1>
<data1>white</data1>
<data2>brown</data2>
<data3>green</data3>
<data4>yellow</data4>
<data5>blue</data5>
<subelement1>
<data1>one</data1>
<data2>two</data2>
<data3>three</data3>
<data4>four</data4>
<subsubelement1>
<data1>name1</data1>
<data2>slow</data2>
</subsubelement1>
<subsubelement2>
<data1>name2</data1>
<data2>fast</data2>
</subsubelement2>
</subelement1>
<subelement2>
<data1>five</data1>
<data2>six</data2>
<data3>seven</data3>
<data4>eight</data4>
<subsubelement1>
<data1>name3</data1>
<data2>fast</data2>
</subsubelement1>
</subelement2>
</element1>
<element2>
<data1>red</data1>
<data2>pink</data2>
<data3>purple</data3>
<data4>black</data4>
<subelement1>
<data1>nine</data1>
<data2>ten</data2>
<data3>eleven</data3>
<data4>twelve</data4>
</subelement1>
<subelement2>
<data1>thirteen</data1>
<data2>fourteen</data2>
<data3>fifteen</data3>
<data4>sixteen</data4>
<subsubelement1>
<data1>name1</data1>
<data2>fast</data2>
</subsubelement1>
</subelement2>
</element2>
<element3>
<data1>text</data1>
<data2>text</data2>
<data3>text</data3>
<data4>text</data4>
<data5>text</data5>
<subelement1>
<data1>text</data1>
<data2>text</data2>
<data3>text</data3>
<data4>text</data4>
<subsubelement1>
<data1>text</data1>
<data2>text</data2>
</subsubelement1>
</subelement1>
</element3>
</root>
私はこのような出力を生成できるようにする必要があります。
apples | pears | white | brown | two | name1 | slow
apples | pears | white | brown | two | name2 | fast
apples | pears | white | brown | six | name3 | fast
apples | pears | red | pink | ten | name1 | fast
etc.
私は関係なく、1つのサブ要素の下にありますどのように多くのsubsubelementsのsubsubelementレベルからデータを取得する必要があります。そして、私は次のサブ要素に移り、同じことをする必要があります。その後、データ内の次の要素に移動して繰り返します。ここに私の現在の質問があります。
USE MyDatabase
GO
SELECT XMLColumn.value('(/root/data1)[1]','varchar(150)') AS FirstColumn,
XMLColumn.value('(/root/data2)[1]','varchar(150)') AS SecondColumn,
XMLColumn.value('(/root/element1/data1)[1]','varchar(150)') AS ThirdColumn,
XMLColumn.value('(/root/element1/data2)[1]','varchar(150)') AS FourthColumn,
XMLColumn.value('(/root/element1/subelement1/data2)[1]','varchar(150)') AS FifthColumn,
XMLColumn.value('(/root/element1/subelement1/subsubelement1/data1)[1]','varchar(150)') AS SixthColumn,
XMLColumn.value('(/root/element1/subelement1/subsubelement1/data2)[1]','varchar(150)') AS SeventhColumn
FROM dbo.XMLImport
[1]を別の番号に変更すると、そのレベルで次の値を取得できますが、複数の値を取得することはできません。このデータをループする方法はありますか?いかなる援助も感謝します。ありがとうございました。
実際のXMLでは:要素には実際に番号が付けられていますか(data1、data2、...)? – Shnugo
@ Shnugo - いいえ、私のデータは分類されています。私は層数とばらつきを示す何かを作ろうとしていました。 XMLに関する経験はありません。私はSQLプログラマです。 –