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

Откуда:
Сообщений: 442
declare @a table(tag varchar(50), val varchar(50))

insert into @a 
select 'id','1'
union all
select 'code','99'
union all
select 'name','test'


нужно получить следующий хмл:

<root>
<id>1</id>
<code>99</code>
<name>test</name>
</root>
13 авг 13, 18:13    [14704086]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
выб до xml структуру данных бы нормализовалиб ,а то если

insert into @a 
select 'id','1'
union all
select 'code','99'
union all
select 'name','test'
union all
select 'id','2'
union all
select 'code','999'
union all
select 'name','test 2'


как понять к какому id что пренадлежит
13 авг 13, 18:25    [14704123]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
qwerty112
Guest
BERSERC
нужно получить следующий хмл:

<root>
<id>1</id>
<code>99</code>
<name>test</name>
</root>

нуу, так разве что ...
;with cte as
(select [id], [code], [name]
from @a
pivot (max(val) for tag in ([id], [code], [name])) pvt)

select * from cte for xml path('root'), elements
13 авг 13, 18:27    [14704127]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Maxx, да мне главное понять, возможно-ли как-то управлять именем тега через значение столбца в исходной таблице(а не названием столбца)

Если подправить пример то:
declare @a table(type varchar(50), id varchar(50) , val varchar(50))

insert into @a 
select 'id','1','1'
union all
select 'code','1','99'
union all
select 'name','1','test'
union all
select 'id','2','21'
union all
select 'code','2','299'
union all
select 'name','2','2test'


и нужно получить xml вида
<root>
<id @id=1>1</id>
<code @id=1>99</code>
<name@id=1>test</name>
<id @id=2>21</id>
<code @id=2>299</code>
<name@id=2>2test</name>
</root>
13 авг 13, 18:35    [14704159]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
BERSERC
Member

Откуда:
Сообщений: 442
qwerty112, тогда значение атрибутов не вытащить для них(
13 авг 13, 18:38    [14704169]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
mike909
Member

Откуда:
Сообщений: 662
BERSERC
Maxx, да мне главное понять, возможно-ли как-то управлять именем тега через значение столбца в исходной таблице(а не названием столбца)

и нужно получить xml вида
<root>
<id @id=1>1</id>
<code @id=1>99</code>
<name@id=1>test</name>
<id @id=2>21</id>
<code @id=2>299</code>
<name@id=2>2test</name>
</root>

Вообще-то это некорректный xml
Может Вы имели ввиду это:
select cast('<' + t.[type] + ' id="' + t.id + '">' + t.val + '</' + t.[type] + '>' as xml)
from @a as t
for xml path(''), Root('root'), type
13 авг 13, 19:09    [14704270]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли создать такой xml одной инструкцией?  [new]
mike909
Member

Откуда:
Сообщений: 662
BERSERC,

Хотя, если очень хочется получить именно такой недо-xml, то
select '<root>' + (
  select char(13) + char(10) + '<' + t.[type] + ' @id=' + t.id + '>' + t.val + '</' + t.[type] + '>' as [text()]
  from @a as t
  for xml path(''), type
).value('(text())[1]','nvarchar(max)') + char(13) + char(10) + '</root>'
13 авг 13, 19:15    [14704293]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить