sql-server – 使用SQL Server从名为相同的XML节点获取所有数据

前端之家收集整理的这篇文章主要介绍了sql-server – 使用SQL Server从名为相同的XML节点获取所有数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 XML文件,其中我需要数据的节点都被命名为相同.我理解如何访问第一个(或第二个记录),以便以下查询只给我第二个作者(< a1>标记).我如何将所有作者作为一个列?
  1. DECLARE @MyXML XML
  2. SET @MyXML = '<refworks>
  3. <reference>
  4. <rt>Journal Article</rt>
  5. <sr>Print(0)</sr>
  6. <id>869</id>
  7. <a1>Aabye,Martine G.</a1>
  8. <a1>Hermansen,Thomas Stig</a1>
  9. <a1>Ruhwald,Morten</a1>
  10. <a1>PrayGod,George</a1>
  11. <a1>Faurholt-Jepsen,Daniel</a1>
  12. <a1>Jeremiah,Kidola</a1>
  13. <a1>Faurholt-Jepsen,Maria</a1>
  14. <a1>Range,Nyagosya</a1>
  15. </reference>
  16. </refworks>'
  17.  
  18. SELECT
  19. author.value('(a1)[2]','varchar(MAX)') AS 'Author'
  20. FROM @MyXML.nodes('/refworks/reference') AS ref(author)

解决方法

试试这个 :-
  1. SELECT
  2. author.value('./text()[1]','varchar(MAX)') AS 'Author'
  3. FROM @MyXML.nodes('//refworks/reference/child::node()') AS ref(author)
  4. where author.value('local-name(.)[1]','varchar(100)') ='a1'

child :: node()表示一个轴说明符,它是child,::是轴分隔符.

要了解用于在节点中向下钻取的子轴,可以在此MSDN文档中找到.

manipulating xml data in sql server

更新 :-

更简单的方法您处于正确的轨道上.在from子句中指定子节点以过滤数据

  1. SELECT
  2. author.value('(.)[1]','varchar(MAX)') AS 'Author'
  3. FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author)

猜你在找的MsSQL相关文章