Sql server 是否有一些独立于数据库的方法在字段级别获取数据更改通知?
目前,我使用SQLServer2005轮询windows事件数据库,以确定名为windows_事件的表中的更改,该表具有时间戳字段。查看时间戳,我可以确定行是否更改,但不能确定该行中的哪个字段更改 是否有一些通用的,即独立于数据库的方法来检测字段级别的更改?Sql server 是否有一些独立于数据库的方法在字段级别获取数据更改通知?,sql-server,notifications,Sql Server,Notifications,目前,我使用SQLServer2005轮询windows事件数据库,以确定名为windows_事件的表中的更改,该表具有时间戳字段。查看时间戳,我可以确定行是否更改,但不能确定该行中的哪个字段更改 是否有一些通用的,即独立于数据库的方法来检测字段级别的更改? 我需要它是通用的,因为不知道客户会使用什么数据库,所以我不想使用Notification Services或其他特定于SQL Server的技术。我可以使用任何解决方案、.NET、Java或任何其他语言,如果这有助于我解决问题的话。首先,我
我需要它是通用的,因为不知道客户会使用什么数据库,所以我不想使用Notification Services或其他特定于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
变成这样:
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等中,然后轮询表来实现所需的功能。我相信所有数据库都有一个hash函数,比如SHA1'xyz'或MD5'abc',尽管每个数据库的名称可能略有不同
然后,当您轮询表中的更改时,您会看到已更改的行,您可以逐个字段进行比较,以找出已更改的字段。因此,您可以将field1与oldField1、field2与oldField2、field3与oldField3进行比较。对于blob,您可以将SHA1field4与oldField4进行比较
创建存储过程触发器,以便在更新时间戳时复制字段
另一个解决方案是创建一个只存储更改的数据更改日志表。它将通过一个触发器存储过程被插入,它看起来是这样的
id tableName rowKey fieldName oldValue newValue timestamp
1 WINDOWS_EVENTS 42 event1 stable crash 4:44am
Ionno,但如果您想让它独立于数据库,似乎需要一个ORM。@马克,我需要的东西可以用nHibernate来实现吗?此外,我不确定ORM是否适用于在任何给定时间记录数不超过100000条的表。