2010-11-20 57 views
2

我有一個數據表如下SQL表鍵值對的XML

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

使用SQL Server 2005中的T-SQL,我怎樣才能將它轉換爲一個XML作爲

<Values> 
    <F1>2</F1> 
    <F2>5</F2> 
    <F3>1</F3> 
</Values> 

請幫幫我。

回答

4

據我所知,甚至沒有神祕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> 
+0

這很好。我試着用「for xml explicit」,但無法通過。謝謝你回答我的問題。 – Dimuthu 2010-11-21 01:35:20

1

爲什麼不只是查詢表格,將行存儲在數組中,並使用您的(可能是服務器)腳本語言輸出它們(到文件或屏幕)?如果有辦法讓SqlServer像這樣輸出,我不知道它,但它在任何語言中都應該非常簡單。

僞代碼

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

我想在存儲過程中完成它,而不會將數據拉出。所以這對我來說不是一個好的選擇。謝謝回答。 – Dimuthu 2010-11-21 01:31:19