首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Access数据库的CDatabase::ExecuteSQL批量删除

用于Access数据库的CDatabase::ExecuteSQL批量删除
EN

Stack Overflow用户
提问于 2012-09-27 07:34:54
回答 2查看 569关注 0票数 0

我有一个包含超过500,000条记录的access数据库,我想批量删除记录。我得到了一个根据特定条件需要删除的I列表,这个值可能是1到5000。现在,我的代码如下所示

代码语言:javascript
复制
 for ( i = 0  to 5000 )
 { 
    CDatabase.ExecuteSQL( Delete from table where id = ItemToDelete(i) ) 
 }  

每个sql调用几乎需要1秒。

有没有批量删除的选项,或者有没有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-27 07:44:03

我已经很多年没有使用Access了,但我也遇到过同样的挑战。我不会获取所有满足某个条件的记录,而是首先尝试发出一个DELETE WHERE“某个条件”。它可能仍然很慢,但会将SQL调用的数量从5000次减少到1次。

有了这么大的#,一个更极端的解决方案可能是将整个表转储到一个文本文件中,然后编写一个小程序来重新加载它,只加载你想要的那些。

但一般来说,最小化# Sql调用是提高性能的最佳方法。根据服务器的不同,如果WHERE子句只包含主键字段,则删除操作可能会快得多。

票数 0
EN

Stack Overflow用户

发布于 2012-09-27 17:40:22

该声明应为:

代码语言:javascript
复制
Delete from table where id between 1 and 5000

如果您有一个条件,在大多数情况下,您应该能够构建WHERE语句。请勿尝试使用IN单独列出5000个IN。你会遇到各种各样的限制。

如果无法区分删除的标准,则可以在表或CSV中列出单个it,这两种方法都适用于IN。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12612010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档