2016-09-23 31 views
2

我有一個xml數組。使用select時只返回第一個值。這是我的代碼。我的代碼有什麼問題。select從XML中只返回一個項目

DECLARE @xml xml; 
SET @xml =N'<root> 
    <Id>68890</Id> 
    <Id>68900</Id> 
</root>'; 

SELECT 

    replicateIdXml.replicateIds.value('Id[1]','bigint') as id 

    FROM @xml.nodes('/root') AS replicateIdXml (replicateIds) 

它只返回第一行。

回答

2

你非常接近。你的.nodes()返回第一級按行的所有root元素。但只有一個root -element ...比你選擇第一個Id -element,這是你看到的。

你必須讓.nodes()回報所有Id -elements逐行:

DECLARE @xml xml; 
SET @xml = 
N'<root> 
    <Id>68890</Id> 
    <Id>68900</Id> 
</root>'; 

SELECT 
    replicateIdXml.replicateIds.value('.','bigint') as id 
FROM @xml.nodes('/root/Id') AS replicateIdXml (replicateIds) 
+0

非常感謝你。我很感激你如何提出這個答案。我GOOGLE了很多,但無法找到單列XML的例子。如果還有其他鏈接,請提供。我想知道你的想法。 – shanavascet

+1

@shanavascet,這就是'.nodes()'[https://msdn.microsoft.com/en-us/library/ms188282.aspx]的意思是...按照鏈接並閱讀有關文檔'.nodes()','.query()','.value()'和'.modify()'。如果你想要它的硬核,你可以閱讀關於FLWOR ... – Shnugo

+0

非常感謝。 – shanavascet