我的表是XMLData
,其中有XML
列XMLField
。
该列中的数据如下:
<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并检索值。
谢谢
答案 0 :(得分:3)
尝试这样的事情:
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)
基本上,它使用XmlField
列的XML,并根据.nodes()
表达式中的XPath获取XML片段的“虚拟”表。从那里,它到达返回的XML片段,并提取出您感兴趣的单个值。