SQL 服务器将 XML 解析为 table - 具有相同名称的多个节点,第一个节点应为 table 列

SQL Server parse XML to table - multiple node with the same name and first node should be table columns

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

<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

您可以使用为 xml 数据类型提供的 nodes 方法从 html/xml 结构中提取数据(更多信息 here)。

这是一个简单的查询,应该会让您走上正轨:

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>...

问题是返回了第一行(包含列 headers) 数据集内:

如果您想将第一行中的值用作列名,则必须编写动态 xml.