我有两个具有相同结构的表,我需要将所有表从表 A 复制到表 B,问题是表 A 中的某些记录已经存在于表 B 中,因此导致导入失败。
所以我做了一个查询来做导入(也使用导入工具中的构建)
SELECT * from TransactionEntryN
WHERE TransactionEntryN.TransactionEntryID
NOT IN (select TransactionEntryID FROM TransactionEntry)
问题是这个操作需要 13 分钟。要复制 50K 条记录,而我那里有 1600 万条记录,我需要一周时间才能完成...
有没有更快的方法来做到这一点?
顺便说一句,主键 TransactionEntryID 是一个可能会减慢速度的唯一标识符?(我无法更改它,我只是想知道这是否是问题所在。
如果您希望第二个表包含与第一个表相同的数据,为什么不简单地将表清除并替换它呢?
删除表 B 中而不是表 A 中的所有行。然后您可以使用 DOTNET SQLBulkCopy 将数据从表 A 复制到表 B。它非常快。对于 100,000 条记录,只需不到 10 秒。我在这里写了一些伪代码。如果您想要一个完整的工作示例,您可以访问http://technico.qnownow.com/2012/03/27/using-sql-bulk-copy-to-efficiently-load-data-from-source-db-to -目的地-db/