nodos leer consultas consulta campo buscar attribute sql xpath xquery

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