2010-05-27 82 views
1

我有下面的XML:SQL Server節點

<tests> 
    <test>1</test> 
    <test>2</test> 
    <test>3</test> 
</tests> 

,我試圖下面的查詢:

CREATE PROCEDURE [dbo].[test] 
    @Tests xml=null 
AS 
BEGIN 
    SELECT 
     doc.col.value('(test)[1]', 'nvarchar(50)') 
    FROM 
     @Tests.nodes('//tests') AS doc(col) 
END 

但它只返回我從第一

我在這裏錯過了什麼?

+1

這是這裏唯一標記'mssql'的問題。讓我們在未來更關心標籤的選擇,好嗎? – 2010-05-27 18:24:08

+0

對不起,我的壞。我會盡量保持這個tage更合適。 – Kyle 2010-05-27 18:25:36

回答

4

如果你想<test>節點上,您需要使用不同的XPath在.nodes()

SELECT 
    doc.col.value('(.)[1]', 'nvarchar(50)') 
FROM 
     @Tests.nodes('/tests/test') AS doc(col) 

這樣,你得到所有<test>節點的枚舉,你可以選擇來自那些使用(.) XPath的內部XML。

2

nodes()函數中的XPath只返回1條記錄。試試這個:

SELECT 
    doc.col.value('.[1]', 'nvarchar(50)') 
FROM @Tests.nodes('//test') AS doc(col) 
相關問題