首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分解XML结构,其中root下的每个子级都是具有不同名称的集合

分解XML结构,其中root下的每个子级都是具有不同名称的集合
EN

Stack Overflow用户
提问于 2012-11-20 00:02:20
回答 1查看 126关注 0票数 0

有没有一种方法可以在不使用多个CROSS-APPLY语句的情况下解析(在T-SQL脚本中)以下XML?正如您可以注意到的,Root的子代具有不同的名称(它们完全不同--不仅仅是最后一个数字的索引不同)。

我想把这个XML分解到一个表中,在这个表中,每个MeasuredParamName*都是一列,每个值代表一行。每个MeasuredParamName元素都有相同数量的子元素。

即。(MeasuredParamName1、MeasuredParamName2、MeasuredParamName3、MeasuredParamName4)

对于此解决方案,使用交叉应用是否存在性能问题?XML的另一种结构会更合适吗?

例如:

代码语言:javascript
复制
<Data>
<MeasuredParamName1>
    <Value>1</Value>
    <Value>2</Value>
</MeasuredParamName1>
<MeasuredParamName2>
    <Value>3</Value>
    <Value>4</Value>
</MeasuredParamName2>
<MeasuredParamName3>
    <Value>0.5</Value>
    <Value>0.10</Value>
</MeasuredParamName3>
<MeasuredParamName4>
    <Value>20</Value>
    <Value>30</Value>
</MeasuredParamName4>   
   </Data>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-20 00:33:27

尝尝这个。

代码语言:javascript
复制
select  
    MeasuredParamName1,MeasuredParamName2,MeasuredParamName3,MeasuredParamName4
from
(
    select  
        x.n.value('local-name(..)', 'varchar(50)') mpname,
        x.n.value('.','varchar(20)') value,
        row_number() over (partition by x.n.value('local-name(..)', 'varchar(50)') order by x.n) as rn  
    from
        @xml.nodes('/Data//Value') x(n)
) v
pivot
(max(value) for mpname in (MeasuredParamName1,MeasuredParamName2,MeasuredParamName3,MeasuredParamName4)) p

如果我要设计XML,我会将"row“值放在列中。例如

代码语言:javascript
复制
<Data>
   <Value>
       <MeasuredParam1>5</MeasuredParam1>
       <MeasuredParam2>6</MeasuredParam2>
       <MeasuredParam3>7</MeasuredParam3>
       <MeasuredParam4>8</MeasuredParam4>
   </Value>
   <Value>
       <MeasuredParam1>11</MeasuredParam1>
       <MeasuredParam2>12</MeasuredParam2>
       <MeasuredParam3>13</MeasuredParam3>
       <MeasuredParam4>14</MeasuredParam4>
   </Value>
</Data>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13457543

复制
相关文章

相似问题

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