我在SQL Server中使用XQuery读取XML文档。这是我的XML:
declare @xml as xml='
<contactdata>
<contacts>
<groupkey>24</groupkey>
<groupname>Test Group One</groupname>
<contact>
<contactkey>100</contactkey>
<contactname>Test Contact One</contactname>
</contact>
<contact>
<contactkey>111</contactkey>
<contactname>Test Contact Two</contactname>
</contact>
</contacts>
<contacts>
<groupkey>26</groupkey>
<groupname>Test Group Two</groupname>
<contact>
<contactkey>101</contactkey>
<contactname>Test Contact Six</contactname>
</contact>
</contacts>
</contactdata>';
为了检索每个组下的每个联系人详细信息,我正在使用此XQuery语法
select
c.value('(groupkey)[1]','int'),
c.value('(groupname)[1]','nvarchar(max)'),
c.value('(contact/contactkey)[1]','int'),
c.value('(contact/contactname)[1]','nvarchar(max)')
from
@xml.nodes('contactdata/contacts') as Contacts(c)
但这只会返回每组下的第一个联系人。
但我需要这个输出
请帮忙。
答案 0 :(得分:3)
只需将您的查询更改为:
select
c.value('(../groupkey)[1]','int'),
c.value('(../groupname)[1]','nvarchar(max)'),
c.value('(contactkey)[1]','int'),
c.value('(contactname)[1]','nvarchar(max)')
from
@xml.nodes('contactdata/contacts/contact') as Contacts(c)
您需要获取所有<contact>
元素的列表 - 然后从这些XML片段中提取必要的数据。要获取groupkey
和groupname
,您可以使用../
在“树上”向上导航到父节点。