2012-06-11 69 views
0

我正在设置一个用于数据表比较的新系统。这里发生了什么:计算数据表和临时存储之间的差异

我的软件查询第三方数据库,我们没有选择写入数据或改变结构。结果是一个DataTable。此时,此数据表同步,然后以XML格式保存到磁盘。下一次同步时,查询再次返回一个DataTable。然后,我们从磁盘加载存储的数据表并开始计算diff:新的,已更改和已删除的记录。只有差异记录被同步,并且存储的XML被最新的查询取代。

这工作正常,但性能较差的查询较大。所以我们希望将数据切换并存储在SQL Server(2008及更高版本)数据库中。为此,我们正在寻找最佳实践。我们想到的一件事就是计算记录的某种散列,并用它来检查记录是否发生了变化。该系统必须为所有类型的DataTables工作,所以没有严格的列结构。

SQL Server支持这样的事情吗?或者更好地计算代码中的散列并将其存储到SQL中?我们认为没有必要存储整个记录;新的记录将在源表中。对于修改后的记录,只需使用散列查找更改即可,对于已删除的记录,足以存储记录的主键以便能够删除目标系统中的记录。

回答

0

SQL Server允许您定义INSERT,UPDATE和DELETE记录在数据库中的查询的触发器。 SQL Server始终删除并重新插入记录而不是更新。它将两个虚拟表传递给触发器过程:“已删除”和“已插入”。比较这两者之间的主键会告诉你哪个操作正在发生。

我会建议创建一个交易历史记录表,为通过触发器的每个主键插入记录。然后,您稍后将运行同步过程以删除并重新插入同步DataTable的所需记录并清除交易记录。

+0

对不起,但我不知道你的意思。你可能有某种例子吗? – Jasper

相关问题