2012-09-25 71 views
1

我正在嘗試對「顏色」節點出現的次數進行計數,但迄今爲止不成功。如何統計sql xml中節點的出現次數

下面是我到目前爲止所嘗試的。

,如果我有以下邏輯:

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) 

我得到以下錯誤:

Msg 2389, Level 16, State 1, Line 50
XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'

+0

對於您的示例XML,結果是「1」嗎? –

+0

@MikaelEriksson對不起,這是錯誤的,它是失敗 –

回答

12

這算這是1顏色節點的數量。

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

這將計數Colors它是5的行數。

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

+1該死的 - 再次擊敗我 - 再次! :-)爲什麼你輸入這麼快? :-) –

+1

@marc_s - 我一直在工作,今天整天都在輸入XML查詢,所以我真的在處理這些事情。 –

+0

@MikaelEriksson謝謝,這很好。 –

1
select @MyXML.value('count(/SampleXML/Colors)', 'INT') AS 'Count' 
+0

好吧,起初沒有看到父母/ SampleXML,但不認爲它需要downvote – Anshu

相關問題