设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1359|回复: 3
打印 上一主题 下一主题

[查询] 数据量太大,更新操作无法进行,有没有更好的办法?

[复制链接]
跳转到指定楼层
1#
发表于 2011-8-10 09:13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下的更新语句,表bajiaohmxxg 有几万的记录,甚至上十万,条件里的定单编号 也有几万.这个一更新就死机,有每哟更好的办法啊

update bajiaohmxxg set 已核销=-1 where 订单批号 in (select distinct 订单批号 from cxaxiangd)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-8-10 15:24:14 | 只看该作者
update bajiaohmxxg set 已核销=-1 where 订单批号 in (select distinct 订单批号 from cxaxiangd) AND 已核销<>-1
3#
发表于 2011-8-10 16:13:39 | 只看该作者
本帖最后由 todaynew 于 2011-8-10 16:26 编辑
today416 发表于 2011-8-10 09:13
如下的更新语句,表bajiaohmxxg 有几万的记录,甚至上十万,条件里的定单编号 也有几万.这个一更新就死机,有每 ...

sql的in子句会使得操作过程在子程序的记录中前后找一通,如果子程序的记录很多的话,当然就会很慢。为了避免这种胡乱的遍历行为,可以用ADO或DAO记录集解决问题。

dim rs1 as new adodb.recordset,ssql1 as string
dim rs2 as new adodb.recordset,ssql2 as string
dim i as long,j as long
ssql1="select distinct 订单批号 from cxaxiangd"
rs1.Open ssql1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
for i=1 to rs1.recordcount
  ssql2="select * from bajiaohmxxg where 订单批号='" & rs1!订单批号.value & "'"
  rs2.Open ssql2, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  for j=1 to rs2.recordcount
    rs2!已核销.value=-1
    rs2.update
    rs2.movenext
  next
  rs1.movenext
  rs2.close
next
rs1.close
set rs1=nothing
set rs2=nothing

或者
dim rs as new adodb.recordset
dim ssql as string
dim i as long
ssql="select distinct 订单批号 from cxaxiangd"
rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
for i=1 to rs.recordcount
    ssql="update bajiaohmxxg set 已核销=-1 where 订单批号='" & rs!订单批号.value & "'"
    currentdb.execute ssql
    rs.movenext
next
rs.close
set rs=nothing

4#
发表于 2011-8-11 00:14:49 | 只看该作者
貌似可以用内联接来做更新查询吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-23 20:25 , Processed in 0.119513 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表