使用SQL Server将表格数据转换为XML

使用SQL Server将表格数据转换为XML,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我有一个扁平表,其中包含表示需要以XML显示的组的列。示例数据: Market, Label, Style, Type XXX, YYY, JJJ, 111 XXX, YYY, JJJ, 222 XXX, YYY, JJJ, 333 XXX, YYY, JJJ, 444 XXX, YYY, LLL, 111 XXX, YYY, LLL, 222 XXX, YYY, LLL,

我有一个扁平表,其中包含表示需要以XML显示的组的列。示例数据:

Market, Label, Style, Type
XXX,    YYY,   JJJ,   111
XXX,    YYY,   JJJ,   222
XXX,    YYY,   JJJ,   333
XXX,    YYY,   JJJ,   444    
XXX,    YYY,   LLL,   111    
XXX,    YYY,   LLL,   222    
XXX,    YYY,   LLL,   333    
XXX,    YYY,   LLL,   444
使用T-SQL输出以下内容的最佳方式是什么:

<Market value=XXX>
    <label value=YYY>
       <Style value=JJJ>
          <Type value=111>
          </Type>
          ...
       </Style>
       <Style value=LLL>
          ...
       </Style>
    </label>
</Market>

...
...

我可以在SQL Server中使用XML Explicit子句来实现这一点吗?

在SQL Server 2000中,有3种将表生成为XML的成形方法:

  • 对于xml auto->根据USE table自动生成对xml的查询
  • 对于xml原始->在xml中生成查询表到行标记
  • 对于xml explicit->最复杂但最舒适的方式:)您可以定义自己的xml结构
  • 对于备忘单,您可以看到以下内容


    希望这能对你有所帮助。

    这可能会有帮助。。看一看

    SELECT distinct MyTable.Market "Market/@Value",
            MyTable.Label "Market/Label/@Value",
            MyTable.Style "Market/Label/Style/@Value",
    
                 (SELECT Type AS  "Value"
                   FROM   MyTable myTab
                   WHERE myTab.Market=MyTable.Market
                            and myTab.Label=MyTable.Label
                            and myTab.Style = MyTable.Style
                   FOR XML PATH ('')
                   ) AS "Market/Label/Style/Type"
            FROM MyTable  
    FOR XML PATH('')
    
    结果XML为:

    <Market Value="XXX">
      <Label Value="YYY">
        <Style Value="JJJ">
          <Type>&lt;Value&gt;111&lt;/Value&gt;&lt;Value&gt;222&lt;/Value&gt;&lt;Value&gt;333&lt;/Value&gt;&lt;Value&gt;444&lt;/Value&gt;</Type>
        </Style>
      </Label>
    </Market>
    <Market Value="XXX">
      <Label Value="YYY">
        <Style Value="LLL">
          <Type>&lt;Value&gt;111&lt;/Value&gt;&lt;Value&gt;123&lt;/Value&gt;</Type>
        </Style>
      </Label>
    </Market>
    
    
    值111/值222/值333/值444/值
    值111/值123/值
    

    希望它有帮助

    在T-SQL中格式化复杂的XML文档是件蠢事。这是可以做到的——也许吧——但一个月后你又回来了,你所得到的是无法理解的


    用C#或任何处理
    数据读取器
    以生成XML的方法编写一个方法,或者编写一个XSLT转换,将查询发出的XML转换为您试图创建的任何特殊格式,都要容易得多。

    看看SQLXML库。您可以创建一个带注释的XSD文件来生成XML文档

    只是预先警告一下,这种方法的性能相当差。我已多次向Microsoft请求查看此问题。我比较了手工编写“FOR XML”查询需要毫秒才能完成,而带注释的XSD版本需要10秒


    我个人认为,如果你能解决性能差的问题,带注释的XSD是一个非常优雅的解决方案。

    有四个,
    PATH
    is 2005+感谢链接。我已经看了3个选项。所有这些似乎都提供了使用多个表的示例我的问题只使用一个表来创建XML层次结构。不确定是否可以在SQL中完成?我非常确定它会起作用。因为TUT是针对sql server的:)谢谢。它非常接近,但当我添加更多数据时,它无法正确分组。我想我会接受Robert留下的答案,用代码来做可能更容易。用C#/etc更容易做的唯一原因是练习和熟悉。如果您从未使用过[T]SQL,那么通过它生成XML将不会变得更容易。