有一些数据库无关的方式获取数据,在外地更改通知?
-
10-07-2019 - |
题
目前,使用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
不隶属于 StackOverflow