从XML字段读取数据并写入另一个XML字段sql server

从XML字段读取数据并写入另一个XML字段sql server,sql,sql-server,Sql,Sql Server,我在一个表中有两个XML字段,比如a和B。a有如下数据: <periods> <historicalperiod>2</historicalperiod> <historicalperiod>4</historicalperiod> <historicalperiod>6</historica

我在一个表中有两个XML字段,比如a和B。a有如下数据:

                <periods>
                <historicalperiod>2</historicalperiod>
                <historicalperiod>4</historicalperiod>
                <historicalperiod>6</historicalperiod>
                <historicalperiod>8</historicalperiod>
                </periods>

有更好的方法吗?

切碎XML并使用行编号枚举切碎的节点。将新的XML节点构建为字符串,转换为XML,并使用for XML path组合节点

                <periods>
                <historicalperiod1>2</historicalperiod1>
                <historicalperiod2>4</historicalperiod2>
                <historicalperiod3>6</historicalperiod3>
                <historicalperiod4>8</historicalperiod4>
                 </periods>
                create table temp 
                (period int )

                ;with cte as (
                select
                 T.C.value('.', 'nvarchar(max)') as period
                 from  BatchQuotaSettings 
                 CROSS APPLY HistoryPeriods.nodes('/periods/historicalperiod') as T(C)     
                    )
                 insert into temp (period)
                 select c.period
                  from cte c 
update T
set B = (
        select cast('<historicalperiod'+cast(S.R as varchar(10))+'>'+S.V+'</historicalperiod'+cast(S.R as varchar(10))+'>' as xml)
        from (
             select P.X.value('text()[1]', 'varchar(10)') as V,
                    row_number() over(order by P.X) as R
             from T.A.nodes('/periods/historicalperiod') as P(X)
             ) as S
        for xml path(''), root('periods'), type
        )
from BatchQuotaSettings as T