使用 SQL Server 创建 XML

Posted

技术标签:

【中文标题】使用 SQL Server 创建 XML【英文标题】:Creating XML with SQL Server 【发布时间】:2013-10-10 16:17:28 【问题描述】:

我有一张包含数据的表格:

itemID          itemLocation    quantity
-------------------------------------------------------
B008KZK44E  COMMITED    1
B008KZK44E  PRIME       1
B008KZK2LE  COMMITED    1

我需要用这个节点结构生成一个xml:

<inventoryItemData>
  <itemID type="FAMILY">B008KZK2LE</itemID>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>COMMITED</itemLocation>
    </itemQuantity>
  </availabilityDetail>
</inventoryItemData>
<inventoryItemData>
  <itemID type="FAMILY">B008KZK44E</itemID>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>COMMITED</itemLocation>
    </itemQuantity>
  </availabilityDetail>
  <availabilityDetail>
    <itemQuantity>
      <quantity unitOfMeasure="EA">1</quantity>
      <itemLocation>PRIME</itemLocation>
    </itemQuantity>
  </availabilityDetail>
</inventoryItemData>

我越接近是这样的:

SELECT 
   'itemID' AS 'itemID/@type',
   itemID AS 'itemID',
   '' AS 'availabilityDetail',
   '' AS 'availabilityDetail/itemQuantity',
   'EA' AS 'availabilityDetail/itemQuantity/quantity/@unitOfMeasure',
   quantity AS 'availabilityDetail/itemQuantity/quantity',
   itemLocation AS 'availabilityDetail/itemQuantity/itemLocation'
FROM TABLE
FOR XML PATH ('inventoryItemData')

我会很感激任何解决方案。

谢谢。

【问题讨论】:

【参考方案1】:
select
    'FAMILY' AS 'itemID/@type',
    t1.itemID AS 'itemID',
    (
        select
        'EA' AS 'itemQuantity/quantity/@unitOfMeasure',
        t2.quantity AS 'itemQuantity/quantity',
        t2.itemLocation AS 'itemQuantity/itemLocation'
        from Table1 as t2
        where t2.itemID = t1.itemID
        for xml path('availabilityDetail'), type
    )
from Table1 as t1
group by t1.itemID
for xml path ('inventoryItemData')

sql fiddle demo

【讨论】:

如果我想在 XML 中也包含 NULL 值。那我需要做些什么改变呢? 您在寻找什么样的输出,您究竟想如何“包含 NULL 值”?【参考方案2】:

这是你想要的吗?

SELECT 
   'FAMILY' AS 'itemID/@type',
   itemID AS 'itemID',
   '' AS 'availabilityDetail',
   '' AS 'availabilityDetail/itemQuantity',
   'EA' AS 'availabilityDetail/itemQuantity/quantity/@unitOfMeasure',
   quantity AS 'availabilityDetail/itemQuantity/quantity',
   itemLocation AS 'availabilityDetail/itemQuantity/itemLocation'
FROM @t
FOR XML PATH ('inventoryItemData')

【讨论】:

如果我想在 XML 中也包含 NULL 值。那我需要做些什么改变呢?

以上是关于使用 SQL Server 创建 XML的主要内容,如果未能解决你的问题,请参考以下文章

sql server数据表导出xml文件

Sql Server XML 列替代 Document DB?

SQL Server XML 数据类型

SQL XML - 从 SQL Server 为发票创建一个 XML 文件,包括一个 XML 文件中的发票位置

SQL Server XML 数据类型和 QUOTED_IDENTIFIER

以特定格式从XML数据创建SQL Server表