2010-09-28 73 views
1

我有一個扁平表,其中包含表示需要以XML顯示的組的列。示例數據:使用SQL Server將表格數據轉換爲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子句中明確做到這一點?

回答

1

格式化複雜的XML文檔是一個傻瓜的差事。它可以完成 - 也許 - 但你一個月後再回來,你得到的是不可理解的。

在C#中編寫方法或處理DataReader以生成XML的任何方法,或編寫XSLT轉換,將查詢​​發出的XML轉換爲您嘗試創建的任何專用格式。

+0

在C#/ etc中更容易實現的唯一原因是練習和熟悉。如果你從不使用它,通過[T] SQL生成XML將不會變得更容易。 – 2010-09-28 18:29:12

0

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

  1. FOR XML AUTO - >生成查詢XML自動根據對使用表
  2. 爲XML RAW - >生成查詢表的行代碼在XML
  3. 對XML明確 - >最複雜的,但大多數舒適的方式:)你可以定義自己的XML結構

的小抄,你可以看到這link

希望這可以幫助你。

+1

有四個,'PATH'是2005+ – 2010-09-28 04:33:42

+0

感謝您的鏈接。我看了3個選項。他們都似乎提供使用多個表的示例我的問題只使用一個表來創建XML層次結構。不確定它是否可以在SQL中完成? – Panaymel 2010-09-28 05:15:58

+0

我很確定它會工作。導致內存是爲SQL服務器:) – fritz 2010-10-08 02:29:12

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> 

希望它可以幫助在T-SQL

+0

感謝您的。它如此接近,但當我添加更多的數據時,它不能正確分組。我想我會回答羅伯特留下的問題,可能會更容易在代碼中做到這一點。 – Panaymel 2010-09-28 09:43:09

0

看看SQLXML庫。您可以創建一個註釋的XSD文件,該文件將生成一個XML文檔。

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

只是事先警告,這種方法的表現也相當不錯。我已經向微軟提出了多個要求看這個問題的請求。我比較了手寫一個需要幾毫秒才能完成的「FOR XML」查詢,並且帶註釋的XSD版本需要10秒。

我個人認爲帶註釋的XSD是非常優雅的解決方案,如果您可以解決性能不佳的問題。

相關問題