OpenXMLを使用してXMLの対象要素間のキャップ要素を取得するクエリを実行していますが、サポート要素の間に上限を入れたくありません。クエリは1つの値を取得するのには効果的ですが、複数の要素ノードがある場合は失敗します。SQL OpenXMLを使用して複数の要素を取得する
<First>
<Test id="83847">
<subject>
<cap>15</cap>
<cap>25</cap>
<cap>100</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
<Test id="83848">
<subject>
<cap>150</cap>
<cap>2</cap>
<cap>10</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
</First>
CREATE Table #XmlTemp(XmlField Xml);
Set Nocount On;
Insert Into #XmlTemp(XmlField)
Select '<First>
<Test id="83847">
<subject>
<cap>15</cap>
<cap>25</cap>
<cap>100</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
<Test id="83848">
<subject>
<cap>150</cap>
<cap>2</cap>
<cap>10</cap>
</subject>
<support>
<cap>9</cap>
</support>
</Test>
</First>'As XmlField;
Declare @xmlData Xml;
Select @xmlData = XmlField From #XmlTemp;
Declare @document int;
Exec sp_xml_preparedocument @document Output, @xmlData, NULL;
SELECT ID,Cap FROM(
SELECT ID,Cap FROM OpenXml(@document,'./First/Test', 0) With (ID varchar(max)'./@id', Cap Varchar(max) './subject/cap')) alias
drop table #xmltemp
それはとても関与テストの私は可能であればそれはOpenXMLのように滞在したいと思いますので、より多くのようにメソッドを.nodes使用するようにクエリを変更するためにかかるかなりの時間だろう。 私は、IDと複数のキャップ要素の値を取得したいだけです。
ありがとうございます。
対応するSPを用意して文書を削除するための 'FROM OPENXML'は古くなっており、これ以上は使用しないでください(まれな例外が存在します)。むしろ適切な[XMLデータ型が提供するメソッド](https://msdn.microsoft.com/en-us/library/ms190798.aspx)を使用してください。 – Shnugo