目前,使用SQL Server 2005,我查询了“窗口事件”数据库,以确定在一个名为WINDOWS_EVENTS表,其中有一个时间戳字段的变化。望着时间戳我能确定,如果该行改变,但该行中没有哪一个领域发生变化。

有一些通用的(即,独立于数据库的方式),以检测现场级变化? (我需要它是通用的,因为没有告诉客户会用什么数据库,所以我不希望使用通知服务或其他SQL-Server特定技术。我可以使用任何解决方案,.NET,Java或任何其他语言是否可以帮助我解决我的问题。)

有帮助吗?

解决方案

首先,我建议从这样的改变你的表结构:

id      field1   field2   field3   field4   timestamp

到这样的:

Table 1
-------
id     fieldKey    value    timestamp
1      1           42       12:03am
2      3           'Cow'    1:45am
3      2           'Moo'    2:33am
4      4           99       3:59am

Table 2
-------
fieldKey     fieldLabel
1            Field One
2            Field Two
3            Event One
4            Event Two

其次,你可以实现你想要的通过与时间戳一起复制旧的值或计算字段值的哈希(长字段),并将它们存储在另一个领域(oldField1,oldField2等),然后轮询表。我相信所有的数据库有一个哈希函数,如SHA1(“XYZ”)或MD5(“ABC”),尽管它可能在每一个稍有不同的名称。

然后,当你查询更改表,你看到,改变了行了,你可以通过现场比较,做一个领域,找出哪些领域发生了变化。所以,你会比较字段1至oldField1,场2至oldField2,字段3至oldField3等。斑点,你可以比较SHA1(字段4)到oldField4)。

创建存储过程触发器在更新时间戳复制字段。

另一种解决方案是创建一个数据更改日志表,该表只存储的变化。这将通过一个触发存储过程被插入,并且它是这样的

id    tableName       rowKey    fieldName     oldValue     newValue     timestamp
1     WINDOWS_EVENTS  42        event1        stable       crash        4:44am
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top