[英]Read XML data in SQL Server
在我的数据库中,我有一个具有以下格式的XML的表:
<grdCharges>
<Row>
<Code>92015</Code>
<Description>Manifest Refraction</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
<Row>
<Code>92014</Code>
<Description>Established Patient Comprehensive 180 (108)</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
</grdCharges>
我想将其转换为以下输出:
id Code Description
1 92015 Manifest Refraction
1 92014 Established Patient Comprehensive 180 (108)
我尝试过这种方式:
Create table #XML
( id int
, xmldata xml
)
insert into #xml values
( 1
, '<grdCharges>
<Row>
<Code>92015</Code>
<Description>Manifest Refraction</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
<Row>
<Code>92014</Code>
<Description>Established Patient Comprehensive 180 (108)</Description>
<Units />
<Mod1 />
<Mod2 />
<Mod3 />
<Mod4 />
<Ptr1>1</Ptr1>
<Ptr2 />
<Ptr3 />
<Ptr4 />
</Row>
</grdCharges>'
)
select id,
X.Y.value('.','Varchar(100)') Code
,P.Q.value('.','Varchar(100)') Description
from #xml
Cross apply xmldata.nodes('/grdCharges/Row/Code') X(Y)
Cross apply Y.nodes('/grdCharges/Row/Description') P(Q)
但这给了我以下结果:
id Code Description
1 92015 Manifest Refraction
1 92015 Established Patient Comprehensive 180 (108)
1 92014 Manifest Refraction
1 92014 Established Patient Comprehensive 180 (108)
我认为问题在于第二个交叉适用。 如何使用第二个十字架申请?
如果没有cross apply
那么我还能做些什么来获得理想的结果? 我需要一些帮助。
您自己的尝试非常接近...
您可以使用APPLY
获取重复节点的派生表。 这是<Row>
,而内的节点<Row>
是你想获取的值:
select id,
X.Y.value('(Code/text())[1]','Varchar(100)') Code
,X.Y.value('(Description/text())[1]','Varchar(100)') Description
from #xml
Cross apply xmldata.nodes('/grdCharges/Row') X(Y)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.