2010-05-12 136 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