0

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

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

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

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

4

1 回答 1

0

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

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

于 2012-06-11T18:11:23.133 回答