leer - Filtrar consultas SQL en la columna XML utilizando XPath/XQuery
xml nodes sql server (1)
Estoy teniendo una mesa con una columna XML. Me gustaría filtrar las filas donde un atributo específico en el XML coincide con una cadena, esencialmente haciendo un WHERE o HAVING.
La mesa se ve algo como esto
| id | xml |
Y el XML algo similar a
<xml>
<info name="Foo">
<data .../>
</info>
<xml>
Quiero obtener todos los ID donde el atributo @name concuerde con un valor.
Pude hacer lo siguiente:
SELECT id, xml.query(''data(/xml/info/@name)'') as Value
FROM Table1
WHERE CAST(xml.query(''data(/xml/info/@name)'') as varchar(1024)) = @match
Pero es increíblemente lento.
Debe haber una mejor forma de filtrar en el resultado de la consulta.
Lo encontré. En lugar de usar query () debería usar exists () .
Mi consulta sería entonces
SELECT id, xml.query(''data(/xml/info/@name)'') as Value
FROM Table1
WHERE xml.exist(''/xml/info/[@name=sql:variable("@match")]'') = 1