2013-07-03 44 views
2

我傳遞以下XML到SQL Server存儲過程:選擇在存儲過程中多個XML元素

<root> 
    <id>6063</id> 
    <id>6064</id> 
</root> 

在我的存儲過程,我有以下的代碼來選擇ID:

SELECT t.n.value('id[1]', 'int') 
FROM @xml.nodes('/root') as t(n) 

現在這個工作,但它顯然只選擇第一個ID並停止。我不太清楚如何製作這個「循環」,並選擇xml文件中的所有ID。

任何幫助非常感謝。

下面是引用完整的存儲過程:

BEGIN 

DECLARE @xml xml = '<root> 
         <id>6063</id> 
         <id>6064</id> 
        </root>' 

SELECT t.n.value('id[1]', 'int') as id 
FROM @xml.nodes('/root') as t(n) 

END 
+0

它看起來對我來說沒問題。根據** [這](http://stackoverflow.com/questions/5758091/how-to-loop-and-parse-xml-parameter-in-sql-server-stored-procedure)** SO文章,它應該像寫作一樣工作。也許你需要做一個** t.n.value('id [1]','int')作爲'ID'**以及? – kgdesouz

+0

好吧我已經嘗試添加「作爲身份證」,但沒有幫助。我將把sp複製到問題中。 – Jamesla

+0

任何人都可以請告訴爲什麼上面的代碼不選擇所有ID? – Hitsa00

回答

4

這SQL應該爲你工作:

DECLARE @xml xml = '<root> 
         <id>6063</id> 
         <id>6064</id> 
        </root>' 

SELECT t.n.value('text()[1]', 'int') as id 
FROM @xml.nodes('/root/id') as t(n) 

從該查詢的結果是:

id 
---- 
6063 
6064 

代替從root元素中選擇,我選擇了0以下的所有id元素並使用text()來讀取值。

希望有所幫助。

+0

工作感謝! – Jamesla

+0

很高興能幫到你! – rsbarro

+0

謝謝。我面對完全相同的問題。 – Hitsa00