2010-05-12 181 views
1

我想將表格中的數據導出到特定格式的XML文件。我對XML文件相當陌生,所以我追求的內容可能很明顯,但我只是無法找到我在網上尋找的東西。SQL Server 2005 FOR XML

我需要的XML結果的格式是:

<data> 
     <event 
      start="May 28 2006 09:00:00 GMT" 
      end="Jun 15 2006 09:00:00 GMT" 
      isDuration="true" 
      title="Writing Timeline documentation" 
      image="http://simile.mit.edu/images/csail-logo.gif"> 
      A few days to write some documentation 
     </event> 
    </data> 

我的表結構是:

name VARCHAR(50), 
description VARCHAR(255), 
startDate DATETIME, 
endDate DATETIME 

(我不是在XML領域圖像或isDuration在這一點上太有興趣時間)。

我曾嘗試:

SELECT [name] 
      ,[description] 
      ,[startDate] 
      ,[endTime] 

    FROM [testing].[dbo].[time_timeline] 
    FOR XML RAW('event'), ROOT('data'), type 

這給了我:

<data> 
    <event name="Test1" 
      description="Test 1 Description...." 
      startDate="1900-01-01T00:00:00" 
      endTime="1900-01-01T00:00:00" 
    /> 
    <event name="Test2" 
      description="Test 2 Description...." 
      startDate="1900-01-01T00:00:00" 
      endTime="1900-01-01T00:00:00" 
    /> 
</data> 

我所缺少的,是描述必須的事件屬性外,並需要有一個標籤。

是否有人能夠指出我正確的方向,或指向我的教程或類似的如何做到這一點?

感謝,

馬特

回答

2

這應該做的工作:

SELECT 
    name "event/@name" 
    , startDate "event/@start" 
    , description "event" 
FROM 
    [testing].[dbo].[time_timeline] 
FOR XML PATH(''), ROOT('data') 

注意事項:

  • 爲了得到descriptionevent的文本內容,我們以「加強」的水平,並使用PATH(''),並在別名指定的名稱event所有列
  • 所有屬性爲中心的列必須拿出所有非屬性爲中心的列

之前對於學習這東西(或至少讓怎麼做你想要什麼的想法),見the docs for FOR XML,只是玩弄喲你自己的表和所需的XML結構。

+0

這是非常好的,我記得碰到類似的東西,但沒有得到它的工作,所以只是假設它不是我以後的東西。你解釋它的方式將幫助我解決其他需要我做的查詢。非常感謝。 – Lima 2010-05-13 01:36:47

1

考慮XML路徑切換到(見http://msdn.microsoft.com/en-us/library/ms189885.aspx對於文件)

一個很局部的例子:

SELECT 
    [name] 
    ,[description] 
    ,[startDate] "@start" 
    ,[endTime]  "@end" 
    FROM [testing].[dbo].[time_timeline] 
    FOR XML PATH('event'), ROOT('data') 
+0

這將把'description'放在它自己的節點中,名爲'description';也必須以屬性爲中心的列第一。 – AakashM 2010-05-12 14:56:13

+0

是的,我試圖用一般的方式來演示這個方法,而不是提供一個特定的工作例子 – 2010-05-12 15:08:53