Моя таблица - XMLData со столбцом XMLXMLField.
Данные в столбце выглядят так:
<table>
<id>{9ebef1ed-51f6-4160-b342-40fd1bf311c5}</id>
<rows>
<row>
<columns>
<column name = "Batch" value = "Test Batch 123" type = "System.String" />
<column name = "PartNo" value = "Sample123" type = "System.String" />
<column name = "Note" value = "Slight Color Variants" type = "System.String" />
<column name = "ShipDate" value = "05-August-2018" type = "System.DateTime" />
<column name = "Qty" value = "2" type = "System.Int32" />
<column name = "DefaultKey" value = "1" type = "System.Int32" />
</columns>
</row>
<row>
<columns>
<column name = "Batch" value = "Second Batch" type = "System.String" />
<column name = "PartNo" value = "SampleXyz" type = "System.String" />
<column name = "Note" value = "Release Date TBD" type = "System.String" />
<column name = "ShipDate" value = "01-September-2018" type = "System.DateTime" />
<column name = "Qty" value = "1" type = "System.Int32" />
<column name = "DefaultKey" value = "2" type = "System.Int32" />
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<data />
<parameters />
</table>
Я хотел бы запросить Batch, PartNo, Note, ShipDate, Qty, DefaultKey и получить значения.
Спасибо


Попробуйте что-то вроде этого:
SELECT
Batch = XC.value('(column[@name = "Batch"]/@value)[1]', 'varchar(50)'),
PartNo = XC.value('(column[@name = "PartNo"]/@value)[1]', 'varchar(50)'),
Note = XC.value('(column[@name = "Note"]/@value)[1]', 'varchar(50)'),
ShipDate = XC.value('(column[@name = "ShipDate"]/@value)[1]', 'varchar(50)'),
Qty = XC.value('(column[@name = "Qty"]/@value)[1]', 'int'),
DefaultKey = XC.value('(column[@name = "DefaultKey"]/@value)[1]', 'int')
FROM
dbo.XmlData
CROSS APPLY
XmlField.nodes('/table/rows/row/columns') AS XT(XC)
Он в основном принимает XML столбца XmlField и получает «виртуальную» таблицу фрагментов XML в соответствии с XPath в выражении .nodes(). Оттуда он обращается к тем возвращенным фрагментам XML и извлекает отдельные значения, которые вам интересны.
Сработало отлично. Спасибо.