简体   繁体   English

查询存储在SQL Server列中的XML数据

[英]Querying XML data stored in SQL Server column

My table is XMLData with an XML column XMLField . 我的表是XMLDataXMLXMLField

The data in the column looks like this: 列中的数据如下所示:

<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>

I would like to query Batch, PartNo, Note, ShipDate, Qty, DefaultKey and retrieve the values. 我想查询Batch,PartNo,Note,ShipDate,Qty,DefaultKey并检索值。

Thank you 谢谢

Try something like this: 尝试这样的事情:

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)

It basically takes the XmlField column's XML, and gets a "virtual" table of XML fragments according to the XPath in the .nodes() expression. 它基本上采用XmlField列的XML,并根据.nodes()表达式中的XPath获取XML片段的“虚拟”表。 From there, it reaches into those XML fragments returned, and pulls out the individual values you're interested in. 从那里,它到达返回的XML片段,并提取出您感兴趣的单个值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM