我有一个 XML 文件,其中我需要数据的节点的名称都相同。我了解如何访问第一条(或第二条记录),因此以下查询仅给出第二作者(<a1>
标签)。如何将所有作者作为一个专栏?
DECLARE @MyXML XML
SET @MyXML = '<refworks>
<reference>
<rt>Journal Article</rt>
<sr>Print(0)</sr>
<id>869</id>
<a1>Aabye,Martine G.</a1>
<a1>Hermansen,Thomas Stig</a1>
<a1>Ruhwald,Morten</a1>
<a1>PrayGod,George</a1>
<a1>Faurholt-Jepsen,Daniel</a1>
<a1>Jeremiah,Kidola</a1>
<a1>Faurholt-Jepsen,Maria</a1>
<a1>Range,Nyagosya</a1>
</reference>
</refworks>'
SELECT
author.value('(a1)[2]', 'varchar(MAX)') AS 'Author'
FROM @MyXML.nodes('/refworks/reference') AS ref(author)
尝试这个 :-
SELECT
author.value('./text()[1]', 'varchar(MAX)') AS 'Author'
FROM @MyXML.nodes('//refworks/reference/child::node()') AS ref(author)
where author.value('local-name(.)[1]', 'varchar(100)') ='a1'
child::node() 表示一个轴说明符,它是child
and ::
是轴分隔符。
要了解用于在节点中向下钻取的子轴,可以在此处找到MSDN http://msdn.microsoft.com/en-US/library/ms345122%28v=SQL.90%29.aspx文档。
or 在sql server中操作xml数据 https://www.simple-talk.com/sql/database-administration/manipulating-xml-data-in-sql-server/
更新 :-
一种更简单的方法您走在正确的轨道上。在 from 子句中指定用于过滤数据的子节点
SELECT
author.value('(.)[1]', 'varchar(MAX)') AS 'Author'
FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)