2011-12-29 25 views
3

如何只抓取xml列的一部分,並將它作爲SQL自己的結果集返回?查詢作爲結果集的xml列的一部分

我在我的數據庫中的XML文件看起來像這樣:

<main> 
    <data> 
    <rows> 
     <_items> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Wedding</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Smith-Wesson</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs>    
      </values> 
     </columns> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Reunion</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Class of 1996</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs> 
      </values> 
     </columns> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Pie-throwing contest</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Cherry pies</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs>    
      </values> 
     </columns> 
     </_items> 
    </rows> 
    </data> 
</main> 

而且我想返回「行」爲設置這樣的結果:

EVENT     NAME 
Wedding     Smith-Wesson 
Reunion     Class of 1996 
Pie-throwing contest Cherry pies 
...etc... 

我使用方法described here查詢單個值,但這不足以獲得我真正需要的所有數據。

我使用SQL Server 2008的

編輯:爲了澄清,這個XML被包含在一個單行。例如,返回上面的XML,我會鍵入

select my_xml_column from my_table; 
+1

您是查詢單個XML字符串還是查詢一組行?而且你的XML看起來也是錯誤的:SQL服務器不接受這種XML數據類型。 – gbn 2011-12-29 14:32:38

+0

修正了XML錯誤。我改變了標籤和數據,將它匿名化了一些,並且加上了一個結尾標籤。這包含在sql server中的一個XML類型的列中,包含在一行中。 – JosephStyons 2011-12-29 14:41:28

回答

2

試試這個:

select X.N.value('(keyvaluepairofstringstring/value[../key = "EVENT"])[1]', 'varchar(100)') as EVENT, 
     X.N.value('(keyvaluepairofstringstring/value[../key = "DETAIL"])[1]', 'varchar(100)') as NAME 
from YourTable as T 
    cross apply T.XMLCol.nodes('/main/data/rows/_items/columns/values/keyvaluepairs') as X(N) 

測試在這裏:http://data.stackexchange.com/stackoverflow/q/122873/

BTW,我不得不解決您的XML。那裏有一些缺失的結束標籤。

+0

你先生太棒了。謝謝! (並且我修復了xml結束標記) – JosephStyons 2011-12-29 14:47:55

相關問題