2014-06-27 48 views
0

FOR XML命令使用列名創建XML節點。我需要根據從數據庫中獲取的值命名我的節點。據我知道你不能做一些事情,如SQL FOR XML使用值作爲列名稱

SELECT鍵部分

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> 

不知道你是否能爲了得到這個XML。幫助將不勝感激。

回答

0

您可以使用FOR XML象下面這樣:

SELECT Section as Title, Value as MailLabel 
FROM table 
FOR XML PATH('WidgetLogin'), ROOT('Resources'), TYPE 
+0

這將爲「WidgetLogin」部分具體工作,我都可能有上百段和值。 – ThunderDev

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 Fiddle

相關問題