以上图为例,提取规格内容为500x3+200存储在数据库表里,当产品数量级大时,可以循环运行下面代码计算规格总数,便于求规格均价的分析场景。
使用SP_EXECUTESQL方法
--1、生成对应字段的计算公式
drop table ##T1
;with x1 as (
select row_number()over(order by id) ids,id,'select @t='+replace(replace(replace(replace(cc,'ml',''),'g',''),'x','*'),'×','*') sql from (
select id,title,replace(bb,substring(ctool.dbo.GetRegexMatchGroups(bb,'([\u4e00-\u9fa5]+)',0,100),1,100),'')cc from (
select *,replace(aa,substring(ctool.dbo.GetRegexMatchGroups(aa,'([\u4e00-\u9fa5]+)',0,100),1,100),'') bb
from test.dbo.vivian_guige_temp
) b
) c where cc not like '%[0-9][lk]%'
)
select * into ##T1 from x1
select * from ##T1 --ids便于做循环判断,id是原始数据的唯一标志,便于匹配回原结果表
--2、生成临时表存放循环计算的字段结果
drop table ##T2
create table ##T2(id int,specs int)
declare @id int
declare @a nvarchar(100)
declare @name int
declare @i int
declare @j int
set @j=1
select @i=max(ids) from ##T1
while @j<=@i --循环条件,确定需要循环的次数
begin
select @id=id,@a=sql from ##T1 where ids=@j
EXEC SP_EXECUTESQL @a, N'@t int output', @name OUTPUT;
insert into ##T2 values(@id,@name)
set @j=@j+1
end
运行结果:
1、运行临时表##T1查询的结果
2、循环计算后存储在临时表##T2的结果
备注:可以上网详细了解SP_EXECUTESQL的用法,博主也是试了很多种方式才求出来结果,如果有更好的方法实现可以评论告知一下,感激~