将 NVP SQL Table 转换为 XML

Convert NVP SQL Table to XML

我有一个 table 包含名称-值对。我想将名称值对序列化为一个 xml 结构,每个名称-值对都有一个元素,[Name] 列作为 xml 元素名称,[Value]列作为XML节点的内容。

例如给定以下示例数据...

;with nvp (Name, Value) as
(
    select 'Food', 'Tacos' union all
    select 'Height', '5''9"' union all
    select 'Value', '3.141'
)
select *
from nvp

我想要一个看起来像这样的 xml 块:

<root>
    <Food>Tacos</Food>
    <Height>5'9"</Height>
    <Value>3.141</Value>
</root>

当我尝试 FOR XML PATH 时,我得到类似下面的结果,这不是我想要的。

<root>
  <Name>Food</Name>
  <Value>Tacos</Value>
</root>
<root>
  <Name>Height</Name>
  <Value>5'9"</Value>
</root>
<root>
  <Name>Value</Name>
  <Value>3.141</Value>
</root>

有人知道怎么做吗?

在转换为 XML 之前将行转列。

还要在 Xml path() 中提及 Root 名称

;WITH nvp (NAME, Valued)
     AS (SELECT 'Food', 'Tacos'
         UNION ALL
         SELECT 'Height', '5''9"'
         UNION ALL
         SELECT 'Value', '3.141')
SELECT *
FROM   nvp
       PIVOT (Max(valued)
             FOR NAME IN ([Food],
                          [Height],
                          [Value])) pv
FOR xml path('root') 

结果:

<root>
  <Food>Tacos</Food>
  <Height>5'9"</Height>
  <Value>3.141</Value>
</root>