0

FOR XML 命令使用列名来创建 XML 节点。我需要以我从数据库中获取的值来命名我的节点。据我所知,你不能做一些事情,比如

SELECT 键 AS 部分

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 获得此功能。帮助将不胜感激。

4

2 回答 2

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)

SQL小提琴

于 2014-06-27T11:21:08.907 回答
0

您可以使用 FOR XML,如下所示:

SELECT Section as Title, Value as MailLabel
FROM table
FOR XML PATH('WidgetLogin'), ROOT('Resources'), TYPE 
于 2014-06-27T09:18:09.137 回答