Поиск XML с помощью LIKE или аналогичной операции полного поиска

Я хочу найти столбец с оценкой XML, чтобы увидеть, содержит ли строка. Я не знаю схемы, я хочу знать, содержится ли строка в любом месте. Я не знаю, будет ли XPATH работать в этой ситуации.

Эквивалент

Select s.Name, ts.ValueXML from table t (nolock) 
join table2 ts (nolock) on t.key_Id = ts.key_Id
join table3 s (nolock) on ts.key_Id=s.key_Id
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'

ОШИБКА: тип данных аргумента xml недействителен для аргумента 1 типа функция.

Соответствующие ts Столбцы столбцов

ValueXml (XML(.), null)

Элемент, который я ищу, должен быть атрибутом. Поэтому, если вышеизложенное невозможно, то что-либо, содержащее этот атрибут, будет хорошей альтернативой.

Ответы

Ответ 1

Простейший (но, безусловно, не самый быстрый) способ заключается в том, чтобы передать ваш столбец в nvarchar(max), прежде чем передать его в like:

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'

Ответ 2

Там вы идете:

SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1

Кажется, что это отлично работает для меня, а также не ищет имена тегов XML в качестве решения, предоставляемого "dasblinkenlight".

Я не знаю, насколько это возможно.