计算数据表和临时存储之间的差异

时间:2012-06-11 14:23:24

标签: sql sql-server

我正在建立一个用于数据表比较的新系统。这是发生的事情:

我的软件查询第三方数据库,在该数据库中我们无法写入数据或更改结构。结果是一个DataTable。此时,此数据表将同步,然后以XML格式保存到磁盘。下一次同步,查询再次返回一个DataTable。然后,我们从磁盘加载存储的数据表并开始计算diff:new,changed和deleted记录。只同步差异记录,并用最新的查询替换存储的XML。

这样可行,但对于较大的查询,性能较差。因此,我们希望将数据切换并存储在SQL Server(2008及更高版本)数据库中。为此,我们正在寻找最佳实践。我们想到的一件事是为记录计算某种哈希值并使用它来检查记录是否已更改。系统必须为所有类型的DataTable工作通用,因此没有严格的列结构。

SQL Server是否支持这样的事情?或者是否更好地计算代码中的哈希值并将其存储到SQL中?我们认为没有必要存储整个记录;新记录将在源表中。对于修改后的记录,使用哈希来查找更改就足够了,对于删除的记录,它足以存储记录的主键,以便能够删除目标系统中的记录。

1 个答案:

答案 0 :(得分:0)

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

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