据我所知,即使是神秘的 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>