xml - SQL 服务器 2008 XPath

标签 xml sql-server-2008 xquery-sql

我们正在尝试根据我们提供的值过滤一组 XML。

我们的数据库的 XML 字段中有以下 XML,如果通过数字“5052095050830”,我们需要在 XML 中找到这个特定的节点。我们提供的号码可能存在任意次数。

任何机构都可以提供一些示例 SQL 来协助吗?

谢谢

<Attributes>
  <ProductVariantAttribute ID="4387">
    <ProductVariantAttributeValue>
      <Value>5052095050830</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="9999">
    <ProductVariantAttributeValue>
      <Value>5052095050830</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="4388">
    <ProductVariantAttributeValue>
      <Value>104401330A</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="4389">
    <ProductVariantAttributeValue>
      <Value>6905</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="4390">
    <ProductVariantAttributeValue>
      <Value>6906</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
  <ProductVariantAttribute ID="4391">
    <ProductVariantAttributeValue>
      <Value>Monday, October 27, 2008</Value>
    </ProductVariantAttributeValue>
  </ProductVariantAttribute>
</Attributes>

最佳答案

您可以使用 .exist()方法 - 像这样:

SELECT 
(list of columns) 
FROM
dbo.YourTable
WHERE
YourXmlColumn.exist('//Value[text()="5052095050830"]') = 1

这会检查您提供的特定值。您可以越精确地定义期望找到该值的 XPath,您的性能就越好。

YourXmlColumn.exist('//Value[text()="5052095050830"]') = 1

非常糟糕 - 它会检查每一个 <Value> XML 中任意位置的节点以查找该值。

像这样:

YourXmlColumn.exist('/Attributes/ProductVariantAttribute/ProductVariantAttributeValue/Value[text()="5052095050830"]') = 1

会更加专注,因此性能会更好 - 但它只会那些由非常 XPath 语句定义的特定节点

关于xml - SQL 服务器 2008 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676271/

相关文章:

Python 3.x : parse ATOM XML and convert to dict

java - 将 MarkupBuilder 与 Groovy 结合使用...创建 XML 参数时出现问题

sql-server - 如何优化“XQuery” SQL

sql-server - 从 XML 节点查询值(可能是 NAMESPACE 问题)

python - 使用 python 迭代解析一个巨大的 xml 文件但出现错误

xml - 将大型 XML 文件拆分为 Hadoop 的可管理部分

sql - 使用 SQL 查找序列中的 N 个元素

c# - 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围错误

sql - 在表中查找尾随空格

sql-server - 学习 SQL Server 中的 XQuery()