我每天需要在数据库中填充数千个条目,但目前我的代码一次手动将每个条目插入数据库中。
Do While lngSQLLoop < lngCurrentRecord
lngSQLLoop = lngSQLLoop + 1
sql = "INSERT INTO db (key1, key2) VALUES ('value1', 'value2');"
result = bInsertIntoDatabase(sql, True)
If result = false Then lngFailed = lngFailed + 1
Loop
这可行,但每 100 个条目大约需要 5 秒。有没有更有效的方法将其放入数据库?我已经尝试过
INSERT INTO db (key1, key2) VALUES ('value1-1', 'value2-1'), ('value1-2', 'value2-2'), ('value1-3', 'value2- 3');
但是由于缺少冒号而失败;错误,表明它不喜欢这样列出的值。 VBA 有办法做到这一点吗?
最佳答案
使用多个 (), ()
子句仅适用于 SQL Server 2008。
但是你很幸运:你可以通过简单地连接 SQL 语句并批处理对 bInsertIntoDatabase 的调用来对这些进行批处理。
这种方法的唯一缺点是,如果批处理中的一个语句失败,则批处理中的每个后续语句也会失败。
因此,如果失败是一个常见问题(例如,按键冲突),您将需要使用另一种方法。一种解决方案是:
- 首先将批处理插入临时表(没有唯一索引,从而避免最初失败)
- 使用 WHERE 子句对主表进行最终插入,以防止出现错误
- 获取结果计数,然后从临时表中的记录总数中减去,即可得到失败次数。
关于sql - Excel VBA,如何进行多个数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975377/