使用 XPath/XQuery 过滤 XML 列上的 SQL 查询
Posted
技术标签:
【中文标题】使用 XPath/XQuery 过滤 XML 列上的 SQL 查询【英文标题】:Filter SQL queries on the XML column using XPath/XQuery 【发布时间】:2010-12-16 08:14:30 【问题描述】:我有一个包含一个 XML 列的表。我想过滤掉 XML 中特定属性与字符串匹配的行,本质上是在执行 WHERE 或 HAVING。
表格看起来像这样
| id | xml |
和 XML 类似的东西
<xml>
<info name="Foo">
<data .../>
</info>
<xml>
我想获取所有 @name 属性匹配值的 id。
我已经能够做到以下几点:
SELECT id, xml.query('data(/xml/info/@name)') as Value
FROM Table1
WHERE CAST(xml.query('data(/xml/info/@name)') as varchar(1024)) = @match
但速度非常慢。
必须有更好的过滤查询输出的方法。
【问题讨论】:
如果您还没有这样做,我还建议您确保您的 XML 列上有索引。 >XML Indexes Overview (SQLServerPedia.com) 【参考方案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
【讨论】:
以上是关于使用 XPath/XQuery 过滤 XML 列上的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
XPath / XQuery:在节点中查找文本,但忽略特定后代元素的内容