Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Загрузка xml в таблицу  [new]
alol55
Member

Откуда:
Сообщений: 26
Добрый день, помогите, пожалуйста, с несложной (думаю) проблемой.

Есть такой xml:

declare @x xml
set @x=
'<Физлицо>
<Данные>
  <Раздел>1</Раздел>
  <Значение>100</Значение>
</Данные>  
<Данные>
  <Раздел>2</Раздел>
  <Значение>150</Значение>
</Данные>  
<Данные>
  <Раздел>3</Раздел>
  <Значение>200</Значение>
</Данные>  
</Физлицо>'


Физлиц там много, по каждому не больше трех разделов. Надо все значения записать в таблицу в строку:

declare @t table(v1 int, v2 int, v3 int)

insert into @t
select n.value('(Данные/Значение)[1]', 'int'),
       n.value('(Данные/Значение)[2]', 'int'),
       n.value('(Данные/Значение)[3]', 'int')
from  @x.nodes('Физлицо') as t(n)

select *
from @t


Сколько людей - столько строк. Приведенный пример работает. Все было бы хорошо, если б не одно "но": разделов может быть меньше трех. Например, для варианта

declare @x xml
set @x=
'<Физлицо>
<Данные>
  <Раздел>2</Раздел>
  <Значение>150</Значение>
</Данные>  
<Данные>
  <Раздел>3</Раздел>
  <Значение>200</Значение>
</Данные>  
</Физлицо>'


надо заполнить, соответственно, второе и третье поля таблицы @t. А у меня заполняются первое и второе, третье остается пустым. Как переписать запрос, чтобы значения разносились по нужным полям?

По форуму искали, ничего похожего не нашли.
4 мар 13, 14:34    [14008972]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка xml в таблицу  [new]
мимо
Guest
alol55,
insert into @t (v1 
, v2 
, v3 )

select n.value('(Данные/Значение)[1]', 'int') as v1,
       n.value('(Данные/Значение)[2]', 'int') as v2,
       n.value('(Данные/Значение)[3]', 'int') as v3
from  @x.nodes('Физлицо') as t(n)
4 мар 13, 14:39    [14009007]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка xml в таблицу  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
select n.value('(Данные[Раздел=1]/Значение)[1]', 'int'),
       n.value('(Данные[Раздел=2]/Значение)[1]', 'int'),
       n.value('(Данные[Раздел=3]/Значение)[1]', 'int')
from  @x.nodes('Физлицо') as t(n)
4 мар 13, 14:43    [14009048]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка xml в таблицу  [new]
alol55
Member

Откуда:
Сообщений: 26
daw, спасибо огромное!!!
4 мар 13, 14:46    [14009086]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить