使用SQL获取XML节点值

时间:2016-01-14 21:51:43

标签: sql xml sql-server-2014

我正在使用SQL Server 2014,我需要帮助构建一个查询,它将为我提供特定XML节点的所有值。我有一个表格,其中包含以xml格式存储的信息。 xml数据如下所示:

<category>
   <text>Laser Printers</text>
   <title id="1">
      <text>HP OfficeJet Pro 8610</text>
   </text>
   <title id="2">
      <text>HP OfficeJet Pro 8700</text>
   </text>
   <title id="3">
      <text>Canon PIXMA MX 922</text>
   </text>       
</category>

我只能使用此查询从表格中的每一行获取第一个节点的值。

SELECT it.contents.value('(category/title/text)[1]', 'NVARCHAR(255)') as Printer
FROM inventory i
INNER JOIN store_products p ON i.inventoryId = p.inventoryId
INNER JOIN items it ON p.itemId = it.itemId

所以我的结果是:

Printer
HP OfficeJet Pro 8610

我需要的是以下内容:

Printer
HP OfficeJet Pro 8610, HP OfficeJet Pro 8700, Canon PIXMA MX 922

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

您需要使用CROSS APPLY.nodes() XQuery函数 - 如下所示:

SELECT 
    XC.value('(text)[1]', 'varchar(100)') AS Printer
FROM 
    inventory i
INNER JOIN 
    store_products p ON i.inventoryId = p.inventoryId
INNER JOIN 
    items it ON p.itemId = it.itemId
CROSS APPLY
    it.contents.nodes('/category/title') AS XT(XC)