来自XML字段的SQL SELECT作为多个记录

时间:2016-04-10 05:55:35

标签: sql sql-server xml xpath

我正在从ORDERS表中进行SELECT查询,该表包含一个XML字段。 XML字段包含订单行项目的其他数据。我知道这不是最好的设计,但我必须坚持下去。 我需要选择所有订单行项目。

这为我提供了每个订单的第一个订单项:

SELECT
OrderNumber,
[OrderItems].value('(/items/item/sku/node())[1]', 'varchar(20)') AS SKU
FROM Orders
WHERE OrderDate = '2016-04-09'

有没有办法获取所有发票的所有订单项?

1 个答案:

答案 0 :(得分:2)

nodes()APPLY一起使用,将XML数据分解为多个记录。例如,假设您想要在<sku>元素级别粉碎XML,您可以执行以下操作:

SELECT
    OrderNumber,
    SkuColumn.value('.', 'varchar(20)') AS SKU
FROM Orders
    CROSS APPLY OrderItems.nodes('/items/item/sku') SkuTable(SkuColumn)
WHERE OrderDate = '2016-04-09'