Office中国论坛/Access中国论坛

标题: 发现ADP的一个批量更新的问题 [打印本页]

作者: lshstruc    时间: 2015-2-25 22:18
标题: 发现ADP的一个批量更新的问题
今天在自己的一个ADP程序上发现了一个问题,环境win7+acc2007+sqlserver2000,我进行数据测试的时候,要对表中176W条记录的一个bit字段更新,全部更新为true(原来全是false),我在acc2007自带的查询设计器内,设计了一个更新查询存储过程,更新到true,运行,速度非常快,但检查数据时发现,只更新了ID从11~10012的记录(首条ID是11),也就是说,只更新了1W条记录。其余的记录还是false。
我觉得很奇怪,又反复运行了几次,每次都是一个结果,只更新前1w条记录。
感觉很奇怪,就打开SQLserver的查询分析器,第一次运行1分06秒,第二次运行3秒,运行完毕检查数据176W条数据全部更新完毕。
觉得不甘心,又在VBA里面写了一个按钮激发的更新事件,用docmd.runsql()运行,运行3秒,运行完毕检查数据176W条数据全部更新完毕
这是什么原因?



作者: tmtony    时间: 2015-2-25 23:34
你的表的bit字段可能原来未设置默认值 ?
作者: lshstruc    时间: 2015-2-26 08:48
谢谢版主
今天一早又找了台别的电脑试了一下,还是这个结果。
表中设置bit字段默认值为false,在更新之前所有的176W记录都是false,没有null值。
作者: lwwvb    时间: 2015-2-26 16:23
道理应该是在ACCESS运行存储过程或打开窗体记录集时,可能把SQL SERVER设为有效行数为10000条,所以这样。
但是直接执行SQL时,没有设这个命令,所以有这样的差别。看看ACCESS窗体,ACCESS选项等等,有没有把这个有效行数设为0(无限制)即可。
作者: lwwvb    时间: 2015-2-26 16:23
道理应该是在ACCESS运行存储过程或打开窗体记录集时,可能把SQL SERVER设为有效行数为10000条,所以这样。
但是直接执行SQL时,没有设这个命令,所以有这样的差别。看看ACCESS窗体,ACCESS选项等等,有没有把这个有效行数设为0(无限制)即可。
作者: zhuyiwen    时间: 2015-5-24 09:29
用 CurrentProject.Connection.Execute "..." 效率可能更高。

你的存储过程的运行方式,双击打开运行,会受到 lwwvb 所说的限制。将其设为 0,会影响全局,不建议。而是建议改变执行存储过程的方式。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3