Joh*_*ohn 2 t-sql sql-server-2008
谁能告诉我如何从以下xml中选择值:我想得到如下行:Col1:key,Col2:key,Col3:value
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
Run Code Online (Sandbox Code Playgroud)
这是xml:
<root>
<item>
<key>1</key>
<value>
<params>
<item>
<key>1</key>
<value>value</value>
</item>
<item>
<key>2</key>
<value>value2</value>
</item>
<item>
<key>3</key>
<value>value3</value>
</item>
</params>
</value>
</item>
<item>
<key>2</key>
<value>
<params>
<item>
<key>4</key>
<value>value4</value>
</item>
<item>
<key>5</key>
<value>value5</value>
</item>
<item>
<key>6</key>
<value>value6</value>
</item>
</params>
</value>
</item>
</root>
Run Code Online (Sandbox Code Playgroud)
假设您在T-SQL变量中拥有此XML - 那么您可以使用以下代码片段:
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)
Run Code Online (Sandbox Code Playgroud)
这给了我一个输出:
Key1 Key2 ItemValue
1 1 value
1 2 value2
1 3 value3
2 4 value4
2 5 value5
2 6 value6
Run Code Online (Sandbox Code Playgroud)
方法如下:
使用第一个XQuery方法获取第一个"XML节点列表" <item>下的节点<root>列表.nodes(),并将<key>该XML片段中的XML元素的值提取到Key1
抢XML片段中的XML节点的"嵌套"列表中,使用value/params/item的XPath,来获取子行-从提取值<key>,并<value>从这些嵌套的子XML片段成Key2和ItemValue