代码之家  ›  专栏  ›  技术社区  ›  Lima

用于XML的SQL Server 2005

  •  1
  • Lima  · 技术社区  · 16 年前

    我想将数据从表导出到特定格式的XML文件。我对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 回复  |  直到 16 年前
        1
  •  2
  •   AakashM    16 年前

    这应该可以做到:

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

    需要注意的事项:

    • 为了得到 description 作为的文本内容 event ,我们必须“提高”一个级别并使用 PATH('') ,并指定名称 事件 在所有列的别名中
    • 所有以属性为中心的列必须位于所有以属性为中心的列之前

    关于学习这些东西(或者至少了解如何做你想做的事情),请看 the docs for FOR XML 只需使用自己的表和所需的XML结构。

        2
  •  1
  •   Daniel Renshaw    16 年前

    考虑切换到FOR 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')
    
    推荐文章