2011-07-07 23 views
0

我有一個XML變量,我需要在SQL查詢並返回一個行的每個值:SQL解析的XML字符串插入表的行

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 

有參數節點可以有1個或多個locality_id值( 2在上述情況下) 輸出應該

locality_id 
303 
PC_303 

我已經儘量讓兩行,結果得到,但值不正確上來了,它只是顯示的第一個值的兩倍:

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 
select feed.x.value('(//locality_id)[1]','NVARCHAR(255)') 
from @info.nodes('//parameters/locality_id') feed(x) 

我怎樣才能得到我們需要的東西?

回答

3

問題出在(//locality_id)[1]這是說「讓我第一locality_id在任何級別」。由於您已經使用nodes方法選擇了所需的節點,因此只需使用.從當前上下文中選擇值即可。

declare @info xml 
select @info = '<parameters><locality_id>303</locality_id><locality_id>PC_303</locality_id></parameters>' 
select feed.x.value('.','NVARCHAR(255)') 
from @info.nodes('//parameters/locality_id') feed(x) 
+0

完美。非常感謝。這工作正如我所需要的。 – Nathan