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

Откуда: Москва
Сообщений: 158
declare @T as table (id nvarchar(255),
                    gender varchar(100),
                    last_name varchar(255),
                    first_name varchar(255),
                    middle_name varchar(255)
                    );

insert into @T values('ПУТИН ВЛАДИМИР ВЛАДИМИРОВИЧ','мужской','Путин','Владимир','Владимирович'); 


Необходимо получить такой xml.

<object id="ПУТИН ВЛАДИМИР ВЛАДИМИРОВИЧ">
<fields>
<field name="gender">мужской</field>
<field name="last name">Путин</field>
<field name="first name">Владимир</field>
<field name="middle name">Владимирович</field>
</fields>
</object>
30 июл 14, 10:48    [16375239]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
Wisky
Необходимо получить такой xml.
declare @T as table (id nvarchar(255),
                    gender nvarchar(100),
                    last_name nvarchar(255),
                    first_name nvarchar(255),
                    middle_name nvarchar(255)
                    );

insert into @T values(N'ПУТИН ВЛАДИМИР ВЛАДИМИРОВИЧ',N'мужской',N'Путин',N'Владимир',N'Владимирович'); 

select * from @T for xml auto, ELEMENTS
30 июл 14, 11:23    [16375588]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4953
http://msdn.microsoft.com/ru-ru/library/ms189068.aspx
30 июл 14, 11:24    [16375600]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
alexeyvg
select * from @T for xml auto, ELEMENTS
Не, невнимательно прочитал вопрос...
Нужно делать, используя EXPLICIT..
30 июл 14, 11:26    [16375622]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
select
 t.id as [@id], b.x as fields
from
 @T t cross apply
 (
  select (
   select
    a.[@name], a.[*]
   from
    (values ('gender', t.gender), ('last_name', t.last_name), ('first_name', t.first_name), ('middle_name', t.middle_name)) a([@name], [*])
   for xml path('field'), type)
 ) b(x)
for xml path('object'), type;
30 июл 14, 11:28    [16375642]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
Wisky
Member

Откуда: Москва
Сообщений: 158
Спасибо
30 июл 14, 11:32    [16375692]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
А такой вариант?

declare @T as table (id nvarchar(255),
                    gender varchar(100),
                    last_name varchar(255),
                    first_name varchar(255),
                    middle_name varchar(255)
                    );

insert into @T values('ПУТИН ВЛАДИМИР ВЛАДИМИРОВИЧ','мужской','Путин','Владимир','Владимирович'); 
insert into @T values('ПУТИН1 ВЛАДИМИР ВЛАДИМИРОВИЧ','мужской','Путин1','Владимир','Владимирович'); 


SELECT CAST('<a/>' as xml).query('
	for $a in /a
   return
<object>
	<fields>
		<field name="gender">{sql:column(''gender'')}</field>
		<field name="last name">{sql:column(''last_name'')}</field>
		<field name="first name">{sql:column(''first_name'')}</field>
		<field name="middle name">{sql:column(''middle_name'')}</field>
	</fields>
</object>

') as Result
FROM @T


Кто-то может написать без CAST('<a/>' as xml).query('for $a in /a ?
30 июл 14, 11:54    [16375957]     Ответить | Цитировать Сообщить модератору
 Re: атрибуты развернутые в XML  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
select 
(select '' 
,(select 
 a.[@name]      as [@name]
 ,case 
 when a.[@name] = 'gender'  then t1.gender
 when a.[@name] = 'last name '  then t1.last_name
 when a.[@name] = 'first name'  then t1.first_name
 when a.[@name] = 'middle name'  then t1.middle_name
 end as [*]
from @T t2
cross join (values ('gender', t.gender), ('last name', t.last_name), ('first name', t.first_name), ('middle name', t.middle_name)) a([@name], [*])
where t2.id =t1.id
for xml path('field'),type) 
 from @T t1 where t1.id =t.id
 for xml path('fields'),root('object'), type
) as [Result]
from @T t
30 июл 14, 14:30    [16377170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить