我有一个数据表如下
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>
请帮忙。
答案 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>"