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