Soweit ich weiß, nicht einmal der arkanen for xml explicit
können Sie XML-Tags basierend auf einer Spalte nennen. Wenn es nur wenige verschiedene Schlüssel sind, können Sie umgehen, dass sie durch Aufzählen:
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')
Wenn es viele verschiedene Schlüssel sind, können Sie die XML-Zeichenfolge manuell erstellen:
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
Testdaten:
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)
Beide Alternativen Druck:
<Values><F1>2</F1><F2>5</F2><F3>1</F3></Values>
Das funktioniert super. Ich habe es mit "for xml explicit" versucht, konnte aber nicht durchkommen. Danke das beantwortet meine Frage. – Dimuthu