批量更新某一查询结果集的第N条到第M条的记录的SQL(SQL 2005)

问题:在项目开发中,我们有时候需要根据一些限制条件查询出一个结果集后,再将这个结果集的比如前10行进行某一update操作,后10行再进行另一个update操作。

解决方案:
1)根据限制条件查询出结果集(该结果集应该以其主键进行排序),在该结果集上给各行记录进行编号。
2)根据各行记录的编号取出一次取出前10行的记录或后10行的记录。
3)进行各自的update操作。

参考实现:
以下将以我在项目中多次用到的SQL为例。
代码如下:

update b_H3CMAC
set b_H3CMAC.used='M'
where exists (
   select * from (
      select a.inx2,row_number()over(order by a.inx2) req  --以tableName表的主键id字段进行排序
         from b_H3CMAC a where a.printed='N' and a.used='Y') c --加上查询结果集的限制条件
  where  b_H3CMAC.inx2=c.inx2 and c.req>=1300 and c.req<=1600)--将要更新查询结果集的第1到第3条记录

根据别人博客上面的DB2插入方式修改而来,DB2的代码如下:

update tableName b
set b.A=2 ,b.B=current date  --B字段为日期类型
where exists (
   select 1 from (
      select a.id,row_number()over(order by a.id) req --以tableName表的主键id字段进行排序
         from tableName a where a.C =22 and a.D=1) c --加上查询结果集的限制条件
  where b.id=c.id and c.req>=1 and c.req<=3);--将要更新查询结果集的第1到第3条记录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值