Мне нужно включить XML-запрос как часть предиката WHERE в инструкции SELECT.Использовать XML-запрос как часть предиката WHERE
У меня есть эта структура:
DECLARE @tmp TABLE (typeId int, xmlCol xml);
INSERT INTO @tmp
(typeId, xmlCol)
VALUES
(1, '<search><groups><g id="25" /><g id="26" /></groups></search>'),
(1, '<search><groups><g id="250" /><g id="9" /></groups></search>'),
(2, '<search><groups><g id="25" /><g id="12" /><g id="125" /></groups></search>');
SELECT * FROM @tmp;
Но мне нужно вытащить строки, где typeId=1
И где данные XML содержит <g id="25" />
. Поэтому в моем примере я видел только первую строку в результирующем наборе.
Я бы предпочел XML-запрос, а не кастинг для nvarchar и, если возможно, использовать LIKE
. Я попытался это, но просто получить ошибку синтаксиса:
SELECT
*
FROM
@tmp
WHERE
(typeId = 1) AND
(xmlCol.query('/search/groups/g[@id=25])'))
An expression of non-boolean type specified in a context where a condition is expected, near ')'.
Я искал примеры, но не могу найти XML-запросы используются таким образом.
Это возвращает ошибку: * XQuery [@ tmp.xmlCol.exist()]: в конце выражения XQuery больше нет токенов. Найдено ')'. * – EvilDr
удален последний) теперь это правильно. – Blim
Супер, спасибо. – EvilDr