2015-09-20 83 views
2

我在select語句中輸出XML格式的響應。如何在沒有列名的SQL查詢中執行FOR XML

XML架構如下:Placemark->MultiGeometry->Polygon-><more children> 我正在使用現有數據。

我與運行表,讓我們稱之爲表1,具有

幾何字段的值已預格式化的名稱(VARCHAR數據類型),風格(VARCHAR數據類型)和幾何(XML數據類型)已經有xml了。所有記錄的每個值的根標籤是MultiGeometry。

這是問題所在。

如果我執行:

select name, style, geometry from table1 
for xml path('Placemark'), ELEMENTS 

我收到此:

<Placemark> 
     <Name>stuff</Name> 
     <style>style stuff</style> 
     <Geometry> 
      <MultiGeometry>...xml...</MultiGeometry> 
     </Geometry> 
</Placemark> 

這個失敗的模式,因爲該模式(KML架構)要求MultiGeometry是內標的子標籤,並且架構無法識別<Geometry>標記。

我需要這樣的:

<Placemark> 
    <Name>stuff</Name> 
     <style>style stuff</style> 
     <MultiGeometry>...xml...</MultiGeometry> 
</Placemark> 

但嘗試:

select name, style, geometry as [ ] 
from table1 for xml path('Placemark'), ELEMENTS 

無法查詢。

如何在不帶中間標籤的情況下將MultiGeometry放置在地標中(例如<Geometry>)?

感謝很多

回答

0

也許像.....

SELECT CAST( 
      REPLACE(
       REPLACE(CAST((select name, style, [Geometry] AS [ReplaceMe] 
          from Table1 
          for xml path('Placemark'),ELEMENTS) AS VARCHAR(MAX)) 
        , '<ReplaceMe>' , '') 
       , '</ReplaceMe>' , '') AS XML) 
+0

我喜歡這個主意,但是,有時XML是真正的大。我希望不必在其上運行功能。如果這確實是唯一的方法,那就這樣吧。我將繼續等待更長的時間來看其他想法。 – arcee123

1

肯定的:

select name, style, geometry.query('.') 
from table1 
for xml path('Placemark'), type, ELEMENTS; 
+0

這是正確的答案 - 像魅力一樣工作。非常感激。 – edhubbell