2011-12-29 66 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

相关问题