2016-09-23 2 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 -элемент ... Чем вы выбираете первый Id -элемент, который вы видите.

Вы должны позволить .nodes() вернуть все Id -элементов рядов:

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

спасибо очень много. Я был бы признателен за то, как вы пришли к этому ответу. Я много googled, но не мог найти примеры с одним столбцом xml. Если есть какая-либо другая ссылка, пожалуйста, предоставьте. Я хочу знать ваш образ мышления. – shanavascet

+1

@shanavascet, ну, вот что значит '.nodes()' [https://msdn.microsoft.com/en-us/library/ms188282.aspx] ... Следуйте ссылке и прочитайте документы о '.nodes()', '.query()', '.value()' и '.modify()'. Если вам нужен хардкор, вы можете прочитать о FLWOR ... – Shnugo

+0

Большое спасибо. – shanavascet

Смежные вопросы