FOR XML命令使用列名来创建XML节点。我需要以我从数据库中获取的值命名我的节点。据我所知,你不能做像
这样的事情SELECT Key AS Section
SECTION | KEY | VALUE
-----------------------------------------------------------
PageAddProduct | ErrorDateFormat | Incorrect value
PageAddProduct | ErrorNotSelected | Please select value
WidgetLogin | Title | Connexion
WidgetLogin | MailLabel | Mail
这是所需的XML输出
<Resources>
<WidgetLogin>
<Title>Connexion</Title>
<MailLabel>Mail</MailLabel>
</WidgetLogin>
</Resources>
不确定是否可以使用For Xml获得此功能。非常感谢帮助。
答案 0 :(得分:1)
您可以将XML构建为字符串,然后转换为XML。
此示例代码可以在SQL Server 2012中使用,因为它使用了concat函数,但可以轻松地重写它以使用+
代替。
select cast(concat('<Resources>',
(
select concat('<',T1.SECTION,'>',
(
select concat('<',T2.[KEY],'>',
(select T2.VALUE for xml path('')),
'</',T2.[KEY],'>')
from T as T2
where T1.SECTION = T2.SECTION
for xml path(''), type
).value('text()[1]', 'nvarchar(max)'),
'</',T1.SECTION,'>')
from T as T1
group by T1.SECTION
for xml path(''), type
).value('text()[1]', 'nvarchar(max)'),
'</Resources>') as xml)
答案 1 :(得分:0)
您可以使用如下的FOR XML:
SELECT Section as Title, Value as MailLabel
FROM table
FOR XML PATH('WidgetLogin'), ROOT('Resources'), TYPE