使用 SQL 获取 XML 个节点值

Get XML node values using SQL

我正在使用 SQL Server 2014,我需要帮助构建一个查询,该查询将为我提供特定 XML 节点的所有值。我有一个 table,其中的信息存储在 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>

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

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

这可能吗?

您需要使用 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)