当前位置: 首页 > 面试题库 >

使用XPath / XQuery过滤XML列上的SQL查询

章建木
2023-03-14
问题内容

我有一个带有一个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

但这非常慢。

必须有更好的方法来对查询的输出进行过滤。


问题答案:

找到了。而不是使用query(),我应该使用exist()。

我的查询将是

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


 类似资料:
  • 我在努力让这东西工作。我有一个XML文件,我需要使用XPath过滤元素“标题”。之后,我需要将C元素下的所有内容复制到外部文件,但这不是现在的重点。我需要让这个运行使用xml.etree.cElementTree或xml.etree.ElementTree。我已经在stackoverflow和其他网站上读了一大堆帖子,然后卡住了。秀...首先是XML结构: 我甚至不能通过XPath找到Cid元素。

  • 问题内容: 与其他类似文章一样,我需要从表中的Xml列应用条件中检索任何行,例如,假设您有一个类似xml的列: 我的查询将能够返回节点值和节点值所有的行。 想象一下,就像一个动态表,其中KEY节点代表列名,Value节点代表列的值。 由于键和值节点不是顺序的,因此以下查询不起作用: 问题答案: 而不是将和作为两个单独的搜索来查找,而是执行一次一次查找两者的单个查询,如下所示:

  • XQuery兼容XPath,它使用XPath表达式来限制XML集合上的搜索结果。 有关如何使用XPath的更多详细信息,请参阅我们的XPath教程。 回想一下我们在上面几小节中用来获取书籍列表的以下XPath表达式。 XPath示例 我们将使用books.xml文件并在这个文件上应用XQuery。文件:books.xml 的内容如下所示 - 在这里给出了三个版本的XQuery语句,它们实现了显示价

  • 我有这样的validLog4jXML字符串 我尝试运行以下代码: 在最后一行,我得到了例外: 我试图查看关于VTD-XML的文档,它说: 为避免此异常: com.ximpleware。XPathParseException:未找到前缀xyz的URL 确保创建具有命名空间支持的初始navigator对象(即,最后一个参数设置为true),并将命名空间哈希作为最终参数传递,以查找索引、第一个匹配、所有

  • 问题内容: 我有一个带有许多字段的表。我正在尝试在asp.net中创建搜索过滤器,以便用户可以按一个或多个字段进行搜索。所以基本上我想创建一个包含4个参数的存储过程,如果它不为null,它将把参数附加到WHERE子句中。 TableExample有4列,Col1 Col2 Col3 Col4 我希望有一种方法可以用一个存储过程完成此操作,而不必为每种可能的组合创建一个。 我正在尝试类似的方法,虽然

  • 有了下面的XML示例文档,我需要发出一个XPath/XQuery表达式来获取CD元素的每个子元素的元素名。 所以我需要的查询返回标题,艺术家,国家,国家,价格,年份,任何人都可以帮助请?谢谢