Ответ 1
Простейший (но, безусловно, не самый быстрый) способ заключается в том, чтобы передать ваш столбец в nvarchar(max)
, прежде чем передать его в like
:
cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
Я хочу найти столбец с оценкой 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)
Элемент, который я ищу, должен быть атрибутом. Поэтому, если вышеизложенное невозможно, то что-либо, содержащее этот атрибут, будет хорошей альтернативой.
Простейший (но, безусловно, не самый быстрый) способ заключается в том, чтобы передать ваш столбец в nvarchar(max)
, прежде чем передать его в like
:
cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
Там вы идете:
SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1
Кажется, что это отлично работает для меня, а также не ищет имена тегов XML в качестве решения, предоставляемого "dasblinkenlight".
Я не знаю, насколько это возможно.