このXMLがT-SQL変数に含まれているとすると、次のコードスニペットを使用できます。
DECLARE @input XML = '...(your XML here).....'
SELECT
Key1 = Item.value('(key)[1]', 'int'),
Key2 = Item2.value('(key)[1]', 'int'),
ItemValue = Item2.value('(value)[1]', 'varchar(50)')
FROM
@input.nodes('/root/item') AS T(Item)
CROSS APPLY
item.nodes('value/params/item') AS T2(Item2)
これにより、次の出力が得られます:
Key1 Key2 ItemValue
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
アプローチは次のとおりです。
-
<item>
のリストを取得します<root>
の下のノード 最初の.nodes()
を使用した最初の「XMLノードのリスト」として XQueryメソッド、および<key>
の値を抽出します そのXMLフラグメント内のXML要素をKey1
に -
value/params/item
を使用して、そのXMLフラグメント内のXMLノードの「ネストされた」リストを取得します。 XPath、子行を取得し、<key>
から値を抽出します および<value>
それらのネストされた子XMLフラグメントからKey2
へ およびItemValue