在SQL Server 2012中的未编码的XML列中查询编码的XML

时间:2015-11-18 18:40:23

标签: xml tsql sql-server-2012 sqlxml

我有一个带有XML列的表,如下所示。 XML列在未编码的XML中包含一些编码的XML。

OrderID    UserDefXML
      1    <Order><OrderDetail><LineItem><ItemName>XYZ</ItemName><Custominfo> &lt;PrimaryName&gt;STACKOVERFLOW &lt;/PrimaryName&gt;</Custominfo></LineItem></OrderDetail></Order>      

我需要提取所有PrimaryName LIKE 'STACK%'的行。这个查询应该是什么样的?

1 个答案:

答案 0 :(得分:2)

您可以首先将编码的XML字符串 - Custominfo元素的内容 - 转换为XML数据类型,例如:

SELECT t.*, x.lineItem.value('Custominfo[1]','varchar(max)') 'CustomInfo'
FROM YourTableName t
CROSS APPLY t.UserDefXML.nodes('/Order/OrderDetail/LineItem') as x(lineItem)
WHERE 
  CONVERT(XML, x.lineItem.value('Custominfo[1]','varchar(max)')).value('PrimaryName[1]','varchar(max)') 
  LIKE 'STACK%'

<强> Sqlfiddle Demo

输出

enter image description here