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

时间:2010-09-28 03:19:51

标签: 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,   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子句吗?

4 个答案:

答案 0 :(得分:2)

这可能会有所帮助..看看

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>

希望有所帮助

答案 1 :(得分:1)

在T-SQL中格式化复杂的XML文档是一个愚蠢的错误。它可以完成 - 也许 - 但是一个月之后你会回到它并且你得到的东西是不可理解的。

在C#中编写方法或者处理DataReader生成XML的方法要么容易得多,要么编写一个XSLT转换,将查询​​发出的XML转换为你想要的任何专用格式试图创造。

答案 2 :(得分:0)

在SQL Server 2000中有3个生成表到xml的整形方法:

  1. for xml auto - &gt;根据使用表
  2. 自动生成对xml的查询
  3. for xml raw - &gt;生成查询表到xml
  4. 中的行标记
  5. for xml explicit - &gt;最复杂但最舒适的方式:)你可以定义自己的xml结构
  6. 对于备忘单,您可以看到link

    希望这可以帮到你。

答案 3 :(得分:0)

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

http://msdn.microsoft.com/en-us/library/ms172699

只是预先警告这种方法的表现非常糟糕。我已向Microsoft提出多个请求以查看此问题。我比较了手工编写“FOR XML”查询,需要几毫秒才能完成,带注释的XSD版本需要10秒。

我个人认为,如果您可以解决性能不佳的问题,带注释的XSD是一种非常优雅的解决方案。