Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Парсинг XML  [new]
Guest1410
Guest
Добрый день! Пытаюсь распарсить XML, не могу понять, как тянуть все строки, а не только первую:
DECLARE @idoc int
DECLARE @x xml = 
'<root> 
	<document> 
		<partner id="123"/> 
		<partner name="УФК"/> 
		<doc date="26.10.2015 0:00:00"/> 
		<doc sum="800"/> 
		<doc nds="0"/> 
		<doc destination="Госпошлина"/> 
	</document> 
	<document> 
		<partner id="456"/> 
		<partner name="Лисицын В.В."/> 
		<doc date="06.11.2015 0:00:00"/> 
		<doc sum="1232,4"/> 
		<doc nds="0"/> 
		<doc destination="Оплата за аренду"/> 
	</document> 
</root>'
declare @h int;

exec sys.sp_xml_preparedocument @h output, @x;

select
 *
from
 openxml(@h, '/root/document', 1)
with
(
 id int '/root/document/partner/@id', 
 name nvarchar(100) '/root/document/partner/@name',
 docdate nvarchar(10) '/root/document/doc/@date',
 summ nvarchar(100) '/root/document/doc/@sum',
 nds decimal(19,4) '/root/document/doc/@nds',
 destination nvarchar(100) '/root/document/doc/@destination'
);
14 окт 15, 13:41    [18277602]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11600
select 
n.value('(partner/@id)[1]', 'int') as id,
n.value('(partner/@name)[1]', 'nvarchar(100)') as name,
n.value('(doc/@date)[1]','nvarchar(10)') as docdate,
n.value('(doc/@sum)[1]', 'nvarchar(100)') as summ,
n.value('(doc/@nds)[1]', 'decimal(19,4)') as nds,
n.value('(doc/@destination)[1]', 'nvarchar(100)') as destination
from @x.nodes('//root/document') c(n)
14 окт 15, 14:19    [18277924]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML  [new]
Guest1410
Guest
Konst_One,
большое спасибо!!
14 окт 15, 14:26    [18277989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить