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

Откуда:
Сообщений: 24
есть xml и есть таблица нужно в соответствующие теги <a> добавить атрибут со значением из таблицы где /a[@id = sql:column("@t.id")]

можно ли это сделать без цикла, не пересобирая весь XML и чтобы не нарушился порядок тегов

Вариант с циклом мне известен, вопрос можно ли сделать по без него.


Пример:
declare @t table(id int, val varchar(10));

insert into @t (id, val) values (3,'A');
insert into @t (id, val) values (5,'B');


declare @x xml = '
<x>
  <b x="2333"/>
  <a id="1" />
  <a id="2" />
  <a id="3" />
  <a id="4" />
  <a id="5" />
  <c y="rhhe"/>
</x>';




--должно получиться
'<x>
  <b x="2333"/>
  <a id="1" />
  <a id="2" />
  <a id="3" val="A"/>
  <a id="4" />
  <a id="5" val="B"/>
  <c y="rhhe"/>
</x>';
27 мар 15, 11:34    [17439276]     Ответить | Цитировать Сообщить модератору
 Re: Xml modify с данными из таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Boshmax,
set ansi_warnings on
declare @tbl table (row int identity(1, 1), id int, x xml, xchar varchar(max))
declare @t table(id int, val varchar(10))
declare @processed table(id int, xid int, mynode xml)

insert into @t (id, val) values (3,'A')
insert into @t (id, val) values (4,'TEST')
insert into @t (id, val) values (5,'B')

declare @x xml
set @x = '
<x>
  <b x="2333"/>
  <a id="1" />
  <a id="2" />
  <a id="3" />
  <a id="4" />
  <a id="5" />
  <c y="rhhe"/>
</x>'

insert into @tbl (id, x)
  select 0, T.c.query('.') 
  from @x.nodes('/x/*') AS T(c)

update @tbl
   set id = isnull(x.value('(/a/@id)[1]', 'int'), 0)

update tx
   set x.modify('insert attribute val {sql:column("t.val")}
                 into (/a)[1]')
  from @tbl tx
      join @t t on tx.id = t.id

update @tbl
   set xchar = convert(varchar(max), x)

select * from @tbl


ну я бы предположил что можно вот так извратиться и потом из строк пересобрать xml но думаю что можно нарисовать явно красивше
27 мар 15, 17:01    [17441715]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить