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

Откуда: СПб
Сообщений: 156
Здравствуйте!

Подскажите, пожалуйста, как получить все записи с одинаковыми тэгами из секции
declare @h int, @x xml = '<doc><data><a>1</a><a>2</a><a>3</a><b>3</b></data></doc>';

exec sp_xml_preparedocument @h output, @x;

select
 a, b, c
from
 openxml(@h, '/doc/data', 2)
with
(
 a int 'a',
 b int 'b',
 c int 'c'
 )

exec sp_xml_removedocument @h;


Имена таких тэгов известны и их можно обрабатывать по очереди. Количество одноименных тэгов может быть произвольным. Приведённым способом записывается только первый.
4 апр 17, 15:38    [20365742]     Ответить | Цитировать Сообщить модератору
 Re: Записать данные из XML c одноименными тэгами  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
ArkadyL,
Шо, опять?!
DECLARE
  @x XML = '<doc><data><a>1</a><a>2</a><a>3</a><b>3</b></data></doc>'
;
SELECT
  a.x.value( '.', 'INT' ),
  b.x.value( '.', 'INT' ),
  c.x.value( '.', 'INT' )
FROM
  @x.nodes( '/doc/data' ) p( x )
  OUTER APPLY p.x.nodes( 'a' ) a( x )
  OUTER APPLY p.x.nodes( 'b' ) b( x )
  OUTER APPLY p.x.nodes( 'c' ) c( x )
;
4 апр 17, 15:53    [20365841]     Ответить | Цитировать Сообщить модератору
 Re: Записать данные из XML c одноименными тэгами  [new]
ArkadyL
Member

Откуда: СПб
Сообщений: 156
Спасибо! Со мной это впервые.
4 апр 17, 16:12    [20365929]     Ответить | Цитировать Сообщить модератору
 Re: Записать данные из XML c одноименными тэгами  [new]
ArkadyL
Member

Откуда: СПб
Сообщений: 156
Можно ли вдобавок вывести эти значения в порядке следования тэгов?
Не удаётся включить чудодейственную строку типа
p.x.value('count(for $s in(../Node) where $s << . return(.))', 'int')

в запрос
11 апр 17, 10:41    [20387969]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить