CDatabase :: ExecuteSQL批量删除Access数据库

时间:2012-09-26 23:34:54

标签: ms-access mfc odbc

我有一个包含超过500,000条记录的访问数据库,我想批量删除记录。我得到一个我需要根据特定条件删除的ID列表,这可能是1~5000。现在我的代码看起来像这样

 for ( i = 0  to 5000 )
 { 
    CDatabase.ExecuteSQL( Delete from table where id = ItemToDelete(i) ) 
 }  

每次sql调用大约需要1秒。

是否有批量删除选项或有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

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

有了这么大的#,一个更极端的解决方案可能就是将整个表转储到一个文本文件中并编写一个小程序来重新加载它只有你想要的那个。对于一次性的事情可能不是一个好的解决方案,但如果你每个月都这样做....

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

答案 1 :(得分:0)

该陈述应为:

Delete from table where id between 1 and 5000

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

如果无法区分删除标准,则可以在表格或CSV中列出单个ID,也可以使用IN。