【问题标题】:How to count occurrences of a node in SQL XML?如何计算 SQL XML 中节点的出现次数?
【发布时间】:2012-09-17 05:41:24
【问题描述】:

我正在尝试对“颜色”节点的出现次数进行计数,但到目前为止还没有成功。

以下是我目前尝试过的。

如果我有以下逻辑:

DECLARE @MyXML XML
SET @MyXML = '<SampleXML>
<Colors>
<Color1>White</Color1>
<Color2>Blue</Color2>
<Color3>Black</Color3>
<Color4 Special="Light">Green</Color4>
<Color5>Red</Color5>
</Colors>
<Fruits>
<Fruits1>Apple</Fruits1>
<Fruits2>Pineapple</Fruits2>
<Fruits3>Grapes</Fruits3>
<Fruits4>Melon</Fruits4>
</Fruits>
</SampleXML>'

SELECT
count(a.b.value('Colors','varchar(10)')) AS Color1
FROM @MyXML.nodes('SampleXML') a(b)

我收到以下错误:

消息 2389,第 16 层,状态 1,第 50 行
XQuery [value()]: 'value()' 需要一个单例(或空序列),找到类型为 'xdt:untypedAtomic *' 的操作数

【问题讨论】:

  • 您的示例 XML 的结果会是 1 吗?
  • @MikaelEriksson 对不起,这是错误的,它失败了

标签: sql xml sql-server-2008


【解决方案1】:

这将计算颜色节点的数量,即1

select @MyXML.value('count(/SampleXML/Colors)', 'int')

这将计算Colors 中的行数,即5

select @MyXML.value('count(/SampleXML/Colors/*)', 'int')

【讨论】:

  • 请注意阅读本文的任何人,计数中的 c 必须小写!否则你会得到这个错误:XQuery [XmlData.xmlDoc.value()]: There is no function '{w3.org/2004/07/xpath-functions}:Count()'
【解决方案2】:
select @MyXML.value('count(/SampleXML/Colors)', 'INT') AS 'Count'

【讨论】:

  • 好的,一开始没看到父/SampleXML,但不认为它需要反对
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多