Gra*_*eme 2 xml sql-server xquery openxml
我在SQL Server表中有此XML:
<root>
<meetings>
<meeting>
<id>111</id>
<participants>
<participant><name>Smith</name></participant>
<participant><name>Jones</name></participant>
<participant><name>Brown</name></participant>
</participants>
</meeting>
<meeting>
<id>222</id>
<participants>
<participant><name>White</name></participant>
<participant><name>Bloggs</name></participant>
<participant><name>McDonald</name></participant>
</participants>
</meeting>
</meetings>
</root>
Run Code Online (Sandbox Code Playgroud)
并想要这样的结果集:
MeetingID Name
111 Smith
111 Jones
111 Brown
222 White
222 Bloggs
222 McDonald
Run Code Online (Sandbox Code Playgroud)
这很容易使用,select from openxml
但是我无法使用XQuery。有人可以帮我在那儿,也许也可以对每种方法都有优缺点?
修复无效的XML(<name>
元素必须以</name>
end标签结尾)后,您应该可以使用以下代码:
SELECT
Meetings.List.value('(id)[1]', 'int') AS 'Meeting ID',
Meeting.Participant.value('(name)[1]', 'varchar(50)') AS 'Name'
FROM
@input.nodes('/root/meetings/meeting') AS Meetings(List)
CROSS APPLY
Meetings.List.nodes('participants/participant') AS Meeting(Participant)
Run Code Online (Sandbox Code Playgroud)
基本上,第一个调用.nodes()
给您一个所有<meeting>
节点的伪表,我从中提取会议ID。
该标签.nodes()
上的第二次调用<meeting>
将更深入地<participants>/<participant>
研究子节点列表,并从这些节点中提取名称。