sqlserver 存储过程循环遍历结果集,执行相应操作

现在有这样一个需求,将A表中的汇总结果,用于更新B表中的字段。

select count(*) as c,sum(xxx) as s from A where yyy=zzz;

update B set x=c,y=s where z=zzz;

A中的汇总结果是有多条,多列的,对应B中也是有多条,多列的,但不是一一对应的关系。

实现这个需求可以用存储过程。

1. A表中是以yyy字段作为汇总条件,首选筛选出yyy字段的所有值(去重复)

   select distinct yyy from A;

2.B表中z字段与A表中的yyy字段是对应的,更新B中的字段需要遍历(select distinct yyy from A)的结果集,以此为更新的条件。

DECLARE @x INT,@y FLOAT,@zzz nvarchar(255)=''
	
	DECLARE rs CURSOR LOCAL SCROLL FOR
    select DISTINCT yyy from A
    OPEN rs
    FETCH NEXT FROM rs INTO @zzz
    WHILE @@FETCH_STATUS = 0
	BEGIN
				 						
		SELECT @x=COUNT(*),@y=SUM(xxx) FROM A where yyy=@zzz;
		
		UPDATE B set x=@x,y=@y where z=@zzz;		
		
	FETCH NEXT FROM rs INTO @zzz
    END
    CLOSE rs

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值