具有相同名称的多个节点和第一个节点应为表列

ds97pgxw  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(272)

我有一个如下所示的源xml,我想转换成sql表。第一个“tr”节点应该是表的列,其余的是行。

<table>
      <tbody>
      <tr>
        <td>Description</td>
        <td>Value</td>
        <td>Reference</td>
        <td>Category</td>
        <td>Review</td>
      </tr>
      <tr>
        <td>Process Param</td>
        <td>|ABCD|</td>
        <td>Step1</td>
        <td>Process</td>
        <td>False</td>
      </tr>
      <tr>
        <td>Config Param</td>
        <td>|EFGH|</td>
        <td>Step2</td>
        <td>Config</td>
        <td>True</td>
      </tr>
      <tr>
        <td>Process Param</td>
        <td>|IJKL|</td>
        <td>Step3</td>
        <td>Process</td>
        <td>False</td>
      </tr>
    </tbody>
  </table>

预期的sql输出:output

ldioqlga

ldioqlga1#

您可以使用 nodes 为xml数据类型提供的方法(此处提供更多信息)。
下面是一个简单的查询,它将使您走上正确的轨道:

select 
     Tbl.Col.value('td[1]', 'varchar(50)')  
    ,Tbl.Col.value('td[2]', 'varchar(50)')  
    ,Tbl.Col.value('td[3]', 'varchar(50)')  
    ,Tbl.Col.value('td[4]', 'varchar(50)')  
    ,Tbl.Col.value('td[5]', 'varchar(50)')  
from @x.nodes('//tr') Tbl(Col)

其中@x是包含xml的xml变量:

declare @x xml = '<table>...

问题是第一行(包含列标题)在数据集中返回:

如果要使用第一行中的值作为列名,则必须编写动态xml。

相关问题