我正在从ORDERS表中进行SELECT查询,该表包含一个XML字段。 XML字段包含订单行项目的其他数据。我知道这不是最好的设计,但我必须坚持下去。 我需要选择所有订单行项目。
这为我提供了每个订单的第一个订单项:
SELECT
OrderNumber,
[OrderItems].value('(/items/item/sku/node())[1]', 'varchar(20)') AS SKU
FROM Orders
WHERE OrderDate = '2016-04-09'
有没有办法获取所有发票的所有订单项?
答案 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'