将 SQL 表转换为 XML,每行有 2 个节点

Posted

技术标签:

【中文标题】将 SQL 表转换为 XML,每行有 2 个节点【英文标题】:Convert SQL table to XML with 2 node for each row 【发布时间】:2015-10-15 12:50:16 【问题描述】:

我的 MS SQL 表有以下数据

    ID    CONTENT     FLAG       TEXT
    ----------------------------------
    1     content1    T          text1
    2     content2    F          text2
    3     content3    T          text2

我想在没有任何根节点的情况下从该表中选择以下格式的值。

<ADDRESS ID="1" FLAG="T">
<FORM CONTENT="content1" TEXT="text1"/>
</ADDRESS>

<ADDRESS ID="2" FLAG="F">
<FORM CONTENT="content2" TEXT="text2"/>
</ADDRESS>

<ADDRESS ID="3" FLAG="T">
<FORM CONTENT="content3" TEXT="text3"/>
</ADDRESS>

【问题讨论】:

【参考方案1】:

这是很久以前的事了,但是 - 以防万一您仍然对解决方案感兴趣 - 这将是查询:

 DECLARE @tbl TABLE(ID INT,CONTENT VARCHAR(100),FLAG VARCHAR(1),TEXT VARCHAR(100));
 INSERT INTO @tbl VALUES
 (1,'content1','T','text1')
,(2,'content2','F','text2')
,(3,'content3','T','text2');

SELECT tbl.ID AS [@ID]
      ,tbl.FLAG AS [@FLAG]
      ,tbl.CONTENT AS [Form/@CONTENT]
      ,tbl.TEXT AS [Form/@Text]
FROM @tbl AS tbl
FOR XML PATH('ADDRESS') /*,ROOT('Root')*/ --add Root if you need it

结果

<ADDRESS ID="1" FLAG="T">
  <Form CONTENT="content1" Text="text1" />
</ADDRESS>
<ADDRESS ID="2" FLAG="F">
  <Form CONTENT="content2" Text="text2" />
</ADDRESS>
<ADDRESS ID="3" FLAG="T">
  <Form CONTENT="content3" Text="text2" />
</ADDRESS>

【讨论】:

以上是关于将 SQL 表转换为 XML,每行有 2 个节点的主要内容,如果未能解决你的问题,请参考以下文章

使用 T-SQL 将表转换为 XML

Sql Server 中FOR XML PATH(‘‘)函数用法

Sql Server 中FOR XML PATH(‘‘)函数用法

将 XML 转换为 SQL Server 表(cfdi 文档)

将字符串转换为xml并插入Sql Server

将 XML 多个嵌套节点插入 SQL 表