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

Откуда:
Сообщений: 173
Добрый день,

подскажите, пожалуйста, как выбрать поля Name, INN из таблицы @t

DECLARE @t TABLE (id int, xml xml)


xml такого вида:

<fields>
  <legal name="Name">
    <value>Наименование</value>
  </legal>
  <legal name="INN">
    <value>111111111111</value>
  </legal>
</fields>
12 дек 11, 13:37    [11749081]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по XML  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
select id
      ,Name.value('.', 'nvarchar(20)') as Name
      ,INN.value('.', 'nvarchar(20)') as INN
  from @t
  cross apply [xml].nodes('/fields/legal[@name="Name"]/value') as t2(Name)
  cross apply [xml].nodes('/fields/legal[@name="INN"]/value') as t3(INN)
12 дек 11, 13:46    [11749211]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по XML  [new]
RG
Member

Откуда:
Сообщений: 173
Паганель, спасибо большое))
12 дек 11, 14:45    [11749913]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по XML  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
а так не правильнее ли?
declare @t table (id int, x xml)
declare @x xml='
<fields>
  <legal name="Name">
    <value>Наименование</value>
  </legal>
  <legal name="INN">
    <value>111111111111</value>
  </legal>
</fields>
<fields>
  <legal name="Name">
    <value>Наименование 2</value>
  </legal>
  <legal name="INN">
    <value>222222222222</value>
  </legal>
</fields>';
insert into @t(id, x) values(1, @x);
set @x = '
<fields>
  <legal name="Name">
    <value>Наименование 3</value>
  </legal>
  <legal name="INN">
    <value>333333333333</value>
  </legal>
</fields>';
insert into @t(id, x) values(2, @x);
select id
     , n.c.value('(./legal[@name="Name"]/value)[1]', 'nvarchar(30)') as name
     , n.c.value('(./legal[@name="INN"]/value)[1]', 'nvarchar(12)') as INN
  from @t
 cross apply x.nodes('/fields') as n(c);
12 дек 11, 22:59    [11753487]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить