【发布时间】:2014-01-14 15:46:18
【问题描述】:
我有两个数据表,我们就叫它们db1 和db2。 db2 包含 db1 的所有记录,但 db1 不包含 db2 的所有记录(它们都有相同的列)。我必须每天在db1 中检查修改,并为db2 应用相同的修改。
- 目前我的工具将两个表“导出”到
DataTables,执行转换并将记录更新/导入到db2:
SELECT * FROM db1 -> db1_table
SELECT * FROM db2 -> db2_table
for (int i = 0; i < db1_table.Rows.Count; i++)
{
for (int j = 0; j < db2_table.Rows.Count; j++)
{
//if db1_table.Rows[i] != db2_table.Rows[j] -> UPDATE db2 SET etc.
//if db1_table.Rows[i] doesn't exist in db2 -> INSERT INTO db2 etc.
}
}
这个版本一段时间后变得很慢。我说的是成千上万条记录。
- 另一个是我最初的想法,但我发现它很慢。我拉出整个 db1,遍历它的所有记录,每次都执行一个 sql 查询:
SELECT * FROM db1 -> db1_table
for (int i = 0; i < db1_table.Rows.Count; i++)
{
//SELECT * FROM db2 WHERE "attributes LIKE db1_table.Rows[i]
//do the comparsion here and execute the UPDATE/INSERT commands if necessary
}
哪种方式更快(更好)?我还有其他选择吗?
【问题讨论】:
-
这很复杂。 db1 不是我的,我只有读取权限,并且所有者不希望我的用户通过我的应用程序加载他的数据库,因此我必须使用自己的。
-
如果是SQL server 检查this SO QnA
-
这些数据表在不同的数据库中,在不同的位置,所以我相信我每次要同步时都无法导出整个表。