首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server中读取XML数据

在Server中读取XML数据
EN

Stack Overflow用户
提问于 2018-06-05 08:56:38
回答 1查看 47关注 0票数 1

在我的数据库中,我有一个带有XML的表,格式如下:

代码语言:javascript
复制
<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>

我想把它转换成以下输出:

代码语言:javascript
复制
id   Code  Description   
1   92015  Manifest Refraction  
1   92014  Established Patient Comprehensive 180 (108)

我试过这样做:

代码语言:javascript
复制
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) 

但它给了我以下结果:

代码语言:javascript
复制
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,那么我还能做些什么来获得所需的结果呢?这件事我需要帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 09:00:47

你自己的尝试相当接近..。

使用APPLY获取重复节点的派生表。这是<Row>,而<Row>中的节点是要获取的值:

代码语言:javascript
复制
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)  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50696083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档