2009-10-12 48 views
0

我試圖創造,我想在一個XML字段來存儲在SQL Server中的Excel XML創建從SQL Server 2005中的XML數據2005年我已經這麼遠得到:使用FOR XML

WITH XMLNAMESPACES (
    'urn:schemas-microsoft-com:office:spreadsheet' as "s", 
    'urn:schemas-microsoft-com:office:office' as "o", 
    'urn:schemas-microsoft-com:office:excel' as "x" 
) 
select 'Order' as "@s:Name", 
(
    select 
     'String' as 's:Cell/s:Data/@s:Type', 
     [Order] as 's:Cell/s:Data', 
     null as 'tmp', 
     'String' as 's:Cell/s:Data/@s:Type', 
     [Material] as 's:Cell/s:Data', 
     null as 'tmp', 
     'String' as 's:Cell/s:Data/@s:Type', 
     [Ship-To] as 's:Cell/s:Data' 
    from 
    (
     select 
      'Order' as [Order], 
      'Material' as [Material], 
      'Ship-To' as [Ship-To] 
     union all 
     select 
      [Order], 
      [Material], 
      [Ship-To] 
     from Orders 
     WHERE [Material] IN(1234,5678)) 
    ) as Temp 
    FOR XML PATH('s:Row'), type 
) AS 's:Table' 
FOR XML PATH('s:Worksheet'), root('s:Workbook') 

這裏的我的輸出:

<s:Workbook xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet"> 
    <s:Worksheet s:Name="Order"> 
    <s:Table> 
     <s:Row xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet"> 
     <s:Cell> 
      <s:Data s:Type="String">Order</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">Material</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">Ship-To</s:Data> 
     </s:Cell> 
     </s:Row> 
     <s:Row xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet"> 
     <s:Cell> 
      <s:Data s:Type="String">200909</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">1234</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">US</s:Data> 
     </s:Cell> 
     </s:Row> 
     <s:Row xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet"> 
     <s:Cell> 
      <s:Data s:Type="String">200909</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">5678</s:Data> 
     </s:Cell> 
     <s:Cell> 
      <s:Data s:Type="String">ASIA</s:Data> 
     </s:Cell> 
     </s:Row> 
    </s:Table> 
    </s:Worksheet> 
</s:Workbook> 

我想要的是消除<s:Row>節點中的命名空間。我想擺脫這種:xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet"<s:Row xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:s="urn:schemas-microsoft-com:office:spreadsheet">

任何人有一個想法如何做到這一點?

+1

爲什麼你想要他們被淘汰?他們很誇張,但是正確。 – 2009-10-12 23:45:53

+0

我正在處理大量的數據。儘管現在它可以正常工作,但如果我能修剪那些真正不必要的東西,那將會很不錯。 – sammydc 2009-10-13 02:19:40

回答

1

每個FOR子句都會添加一個名稱空間聲明。我知道擺脫它們的唯一方法是在單個'for xml'查詢中構建整個文檔,這是不可行的。