Подтвердить что ты не робот

Отфильтровать SQL-запросы в столбце XML с помощью XPath/XQuery

У меня есть таблица с одним столбцом XML. Я хотел бы отфильтровать строки, в которых конкретный атрибут в XML соответствует строке, в основном выполняющей WHERE или HAVING.

Таблица выглядит примерно так:

| id | xml |

И XML что-то похожее на

<xml>
  <info name="Foo">
    <data .../>
  </info>
<xml>

Я хочу получить все идентификаторы, где атрибут @name соответствует значению.

Я смог сделать следующее:

SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE CAST(xml.query('data(/xml/info/@name)') as varchar(1024)) = @match

Но это невероятно медленно.

Должен быть лучший способ фильтрации на выходе запроса.

4b9b3361

Ответ 1

Нашел. Вместо использования query() я должен использовать exist().

Тогда мой запрос будет

SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE xml.exist('/xml/info/[@name=sql:variable("@match")]') = 1