SQL表键值对XML

时间:2010-11-20 19:58:39

标签: sql sql-server xml sql-server-2005 tsql

我有一个数据表如下

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

在SQL Server 2005中使用TSQL,如何将其转换为XML

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

请帮忙。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>"