Насколько я знаю, даже тайный for xml explicit
не позволяет вам называть теги XML на основе столбца. Если есть несколько разных ключей, вы можете обойти это, перечислив их:
select case when [key] = 'F1' then [value] end as [F1]
, case when [key] = 'F2' then [value] end as [F2]
, case when [key] = 'F3' then [value] end as [F3]
from @t
for xml path(''), root('Values')
Если ключей много, вы можете создать строку XML вручную:
declare @output varchar(max)
set @output = '<Values>'
select @output = @output +
'<' + [key] + '>' +
CAST([value] as varchar(32)) +
'</' + [key] + '>'
from @t
set @output = @output + '</Values>'
select @output
Данные испытаний:
declare @t table (id int, [key] varchar(3), value int)
insert @t values (1, 'F1', 2)
insert @t values (2, 'F2', 5)
insert @t values (3, 'F3', 1)
Обе альтернативы печати:
<Values><F1>2</F1><F2>5</F2><F3>1</F3></Values>