使用 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)
我正在使用 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)