2015-11-18 1 views
1

У меня есть таблица с столбцом XML, которая выглядит следующим образом. Столбец XML имеет некоторый закодированный XML внутри unencoded XML.Запрос закодированного XML в некодированном столбце XML в SQL Server 2012

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

Мне нужно извлечь все строки, которые имеют PrimaryName LIKE 'STACK%'. Каким должен быть запрос для этого?

ответ

2

Вы можете конвертировать кодируемого Строка XML -The содержание Custominfo element- к данным 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

Смежные вопросы