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

来源:互联网 发布:淘宝网游交易 编辑:程序博客网 时间:2024/06/05 06:54

问题:在项目开发中,我们有时候需要根据一些限制条件查询出一个结果集后,再将这个结果集的比如前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条记录

原创粉丝点击