sql - Excel VBA,如何进行多个数据库条目

标签 sql excel vba

我每天需要在数据库中填充数千个条目,但目前我的代码一次手动将每个条目插入数据库中。

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/

相关文章:

python - 代码在 PyCharm 上运行,但不在 Jupyter 上运行

vba - 变体数据类型将值 0 更改为空或空白

vba - 发送给通讯组的电子邮件不是 MailItems?

Excel VBA 从超链接列表中提取 Web 数据

excel - 单元格值更改事件和运行连续宏

sql - Postgres 约束和外键

mysql - SQL 中的唯一 ID 主键 - 可以自动分配吗

sql - 时态表中的日期函数

string - VBA Excel 查找字符串中的最后一个特定实例

mysql - 特定条件匹配后分组