2016-09-23 32 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