SQL SELECT aus XML-Feld als mehrere datasätze

Ich arbeite an einer SELECT-Abfrage aus einer Tabelle ORDERS, die ein XML-Feld enthält. Unter anderem enthält das XML-Feld Auftragszeilenposten. Ich weiß, das ist nicht das beste Design, aber ich muss es festhalten. Ich muss alle Bestellpositionen auswählen.

Das bekomme mir die ersten Einzelposten für jeden Auftrag:

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

Gibt es eine Möglichkeit, alle Einzelposten für alle Rechnungen zu bekommen?

Verwenden Sie nodes() mit APPLY , um XML-data in mehrere datasätze zu zerkleinern. Wenn Sie beispielsweise annehmen möchten, dass Sie das XML auf <sku> Elementebene <sku> möchten, können Sie wie folgt ausführen:

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