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

Откуда:
Сообщений: 36
Как сконкатенировать одно выражение for xml path(''), знает каждый. А есть ли возможность получить две такие конкатенации за один проход сразу, естественно, с одинаковой сортировкой?

Ну типа для
create table t
(
	i1 int not null,
	i2 int not null
);


писать не два стандартных прохода, типа
set @s1 =
(
	select	', ' + cast(i1 as varchar(16))
	for xml	path ('')
	from	t
	order by i1
);
set @s2 =
(
	select	', ' + cast(i2 as varchar(16))
	for xml	path ('')
	from	t
	order by i1
);

а все в один проход t?

Я понимаю, что самым правильным ответом будет "rtfm xml". И все ж не пинайте в ту сторону. Ну не умею я в xml, кроме простейших заученных конструкций, а ответ получить хотелось бы.

--
Спасибо за внимание, крепко жму всем ягодицы.
9 фев 17, 15:01    [20197040]     Ответить | Цитировать Сообщить модератору
 Re: for xml path('') для двух конкатенаций сразу  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
wadegwadeg
а все в один проход t?
declare @t table
(
	i1 int not null,
	i2 int not null
);

insert into @t values (3, 4), (1, 2);

declare @s1 varchar(1000), @s2 varchar(1000);

select
 @s1 = stuff(x.query('i1/text()').value('.', 'varchar(1000)'), 1, 2, ''),
 @s2 = stuff(x.query('i2/text()').value('.', 'varchar(1000)'), 1, 2, '')
from
(
 select ', ' + cast(i1 as varchar(16)) as i1, ', ' + cast(i2 as varchar(16)) as i2 from @t order by i1 for xml path(''), type
) t(x);

select @s1, @s2;
9 фев 17, 15:57    [20197323]     Ответить | Цитировать Сообщить модератору
 Re: for xml path('') для двух конкатенаций сразу  [new]
wadegwadeg
Member

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

Рахмат тебе, добрый человек!
9 фев 17, 16:55    [20197642]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить