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
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5744 次  |  
        
|   最近记录:  |