2010-11-20 6 views
2

ich eine Datentabelle haben alsSQL-Tabellenschlüssel Wertepaare zu einem XML

 
ID  Key  Value 
-------------------------- 
1  F1  2 
2  F2  5 
3  F3  1 

folgt einem TSQL in SQL Server 2005, wie kann ich dies als

in eine XML konvertieren
<Values> 
    <F1>2</F1> 
    <F2>5</F2> 
    <F3>1</F3> 
</Values> 

Bitte Hilfe.

Antwort

4

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> 
+0

Das funktioniert super. Ich habe es mit "for xml explicit" versucht, konnte aber nicht durchkommen. Danke das beantwortet meine Frage. – Dimuthu

1

Warum nicht einfach die Tabelle abfragen, Zeilen im Array speichern und sie (in Datei oder Bildschirm) mit Ihrer (vermutlich Server-) Skriptsprache ausgeben? Wenn es eine Möglichkeit gibt, SqlServer so auszugeben, weiß ich es nicht, aber es sollte in so ziemlich jeder Sprache ziemlich einfach sein.

Pseudo-Code

LET arr = array of table rows 
print "<Values>" 
foreach in arr as row 
    print "<" + row['Key'] + ">" + row['Value'] + "</" + row['Key'] + ">" 
end foreach 
print "</Values>" 
+0

Ich wollte es in einer gespeicherten Prozedur tun, ohne Daten herauszuziehen. Das war also keine gute Option für mich. Danke für die Antwort. – Dimuthu

Verwandte Themen