【问题标题】:Selecting individual XML node with condition in SQL在 SQL 中选择带有条件的单个 XML 节点
【发布时间】:2014-10-08 10:34:39
【问题描述】:

我有一个类似的 XML 结构

<root>
 <row>
  <value>1</value>
</row>
<row>
 <value>2</value>
</row>
</root>

我想得到&lt;row&gt;,其中&lt;value&gt; = 2。是否可以?有什么例子吗?

更准确地说xml结构是这样的

<root>
 <row>
   <value>1</value>
 </row>
 <root>
   <row>
    <value>2</value>
   </row>
 </root>
</root>

【问题讨论】:

  • 您更新的 xml 结构格式不正确...如果我假设所有根都有根,您也可以使用 @x.nodes('/roots/root/row') a(b)
  • 更新了 XML。不,我没有所有根的根
  • 这是有线的 xml 结构。您的第一个节点&lt;row&gt; 直接在根目录下,您的第二个节点&lt;row&gt; 在根目录下的&lt;root&gt; 下。

标签: sql-server sqlxml xquery-sql


【解决方案1】:

当然:

declare @x xml = '<root>
 <row>
  <value>1</value>
</row>
<row>
 <value>2</value>
</row>
</root>';

select @x.query('/root[1]/row[./value/text()="2"]');

【讨论】:

  • 谢谢罗杰。能否请您解释一下。为什么是 root[1]?
  • @Garima,方括号中的“1”表示“元素的第一个实例”。在您的示例中没有什么区别,但是使用更大的 XML 可以获得更好的性能。
  • 谢谢@Roger。我的错误我犯了错误的xml。用正确的问题更新了我的问题。你现在能回答吗。对不起,我是这方面的新手
  • @Garima,它不是格式良好的 XML(实际上两者都不是)。每个打开的节点都必须关闭。在第一个示例中,根节点没有结束标记。第二个也是一样。
  • @Garima,更糟糕的是,因为您的兴趣节点位于不同的级别。您可以使用“到处搜索”模式,但代价可能非常高:select @x.query('//row[data(./value)="2"]');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多