Sql server 在SQLServer中解析多级XML
我需要解析具有多级多元素的XML 示例XML:Sql server 在SQLServer中解析多级XML,sql-server,xml,Sql Server,Xml,我需要解析具有多级多元素的XML 示例XML: <Studies> <Study ID="1"> <Site Id="1"> <Participant ID="111"/> <Participant ID="222"/> </Site> <Site Id="2"> <Partici
<Studies>
<Study ID="1">
<Site Id="1">
<Participant ID="111"/>
<Participant ID="222"/>
</Site>
<Site Id="2">
<Participant ID="333"/>
<Participant ID="444"/>
</Site>
</Study>
<Study ID="2">
<Site Id="3">
<Participant ID="555"/>
<Participant ID="666"/>
</Site>
<Site Id="4">
<Participant ID="777"/>
<Participant ID="888"/>
</Site>
</Study>
</Studies>
这不会返回任何数据。如果我改变
xc.nodes('Participant') AS XT3(XC3)
到
它返回32行
不过我预计会有8排。有任何提示吗?请尝试以下内容。您也可以参考示例教程
SELECT
StudyID = XC.value('../../@ID', 'int'),
SiteId = XC.value('../@Id', 'int'),
ParticipantId = XC.value('@ID', 'int')
FROM
@Xml.nodes('//Studies/Study/Site/Participant') AS XT(XC)
declare @xml xml = '
<Studies>
<Study ID="1">
<Site Id="1">
<Participant ID="111"/>
<Participant ID="222"/>
</Site>
<Site Id="2">
<Participant ID="333"/>
<Participant ID="444"/>
</Site>
</Study>
<Study ID="2">
<Site Id="3">
<Participant ID="555"/>
<Participant ID="666"/>
</Site>
<Site Id="4">
<Participant ID="777"/>
<Participant ID="888"/>
</Site>
</Study>
</Studies>'
select
Study.value('@ID','int') as Study,
Site.value('@Id','int') as Site,
Participant.value('@ID','int') as Participant
from
@xml.nodes('/Studies/Study') as StudiesTbl(Study)
cross apply
StudiesTbl.Study.nodes('Site') as StudyTbl(Site)
cross apply
StudyTbl.Site.nodes('Participant') as SiteTbl(Participant)
declare@xml='xml'
'
选择
Study.value('@ID','int')作为研究,
Site.value('@Id','int')作为站点,
作为参与者的Participant.value('@ID','int')
从…起
@节点('/Studies/Study')作为StudiesTbl(Study)
交叉应用
StudiesTbl.Study.nodes('Site')作为StudyTbl(Site)
交叉应用
StudyTbl.Site.nodes('Participant')作为SiteTbl(Participant)
您需要交叉应用xc2.节点(“参与者”)作为XT3(XC3)
(请参见xc2
而不是xc
!)
SELECT
StudyID = XC.value('../../@ID', 'int'),
SiteId = XC.value('../@Id', 'int'),
ParticipantId = XC.value('@ID', 'int')
FROM
@Xml.nodes('//Studies/Study/Site/Participant') AS XT(XC)
declare @xml xml = '
<Studies>
<Study ID="1">
<Site Id="1">
<Participant ID="111"/>
<Participant ID="222"/>
</Site>
<Site Id="2">
<Participant ID="333"/>
<Participant ID="444"/>
</Site>
</Study>
<Study ID="2">
<Site Id="3">
<Participant ID="555"/>
<Participant ID="666"/>
</Site>
<Site Id="4">
<Participant ID="777"/>
<Participant ID="888"/>
</Site>
</Study>
</Studies>'
select
Study.value('@ID','int') as Study,
Site.value('@Id','int') as Site,
Participant.value('@ID','int') as Participant
from
@xml.nodes('/Studies/Study') as StudiesTbl(Study)
cross apply
StudiesTbl.Study.nodes('Site') as StudyTbl(Site)
cross apply
StudyTbl.Site.nodes('Participant') as SiteTbl(Participant)