Добрый день!
Тыщу лет не практиковался в запросах сложнее простых выборок, а тут пришлось.
Есть MSSQL. Есть база. В базе есть табличка.
В табличке какой-то нехороший тип назвал поле
xml
типа ntext.
В этом поле, само собой, содержится XML некоей структуры.
Когда я пытаюсь сделать туда запрос с поиском типа:
Select xml
FROM dbo.entity
WHERE xml.value('(/r/authCard)[1]', 'nvarchar(max)') LIKE N'%slip%';
Сервер мне на это закономерно отвечает, что глупости я пишу
Не удалось найти столбец "xml", определяемую пользователем функцию или агрегатную функцию "xml.value". Также возможно, имя является неоднозначным.
Ладно, шут с ним, мы не пальцем деланные - экранируем имя колонки - выдаёт совершенно другую ошибку:
Select xml
FROM dbo.entity
WHERE 'xml'.value('(/r/authCard)[1]', 'nvarchar(max)') LIKE N'%slip%';
Не удалось вызвать методы для varchar.
Есть подозрение, что где-то ошибка, но где - додуматься не могу.
По мануалам вроде всё корректно.
Подскажите пожалуйста - где я дурак?
UPD:
Попробовал ещё и вот такой вариант из интернетов:
Select cast(xml as nvarchar(max)) as 'Uxml'
FROM dbo.entity
WHERE 'Uxml'.value('(/r/authCard/slip)[1]') LIKE '8A00010056133C01';
Ошибка прежняя:
Не удалось вызвать методы для varchar.