我正在使用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
这甚至可能吗?
答案 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)