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 にキャストできます。

このサンプル コードは、concat 関数を使用しているため、SQL Server 2012 で動作しますが、代わりに使用するように簡単に書き直すことができます+

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 に答える