Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否有一些独立于数据库的方法在字段级别获取数据更改通知?_Sql Server_Notifications - Fatal编程技术网

Sql server 是否有一些独立于数据库的方法在字段级别获取数据更改通知?

Sql server 是否有一些独立于数据库的方法在字段级别获取数据更改通知?,sql-server,notifications,Sql Server,Notifications,目前,我使用SQLServer2005轮询windows事件数据库,以确定名为windows_事件的表中的更改,该表具有时间戳字段。查看时间戳,我可以确定行是否更改,但不能确定该行中的哪个字段更改 是否有一些通用的,即独立于数据库的方法来检测字段级别的更改? 我需要它是通用的,因为不知道客户会使用什么数据库,所以我不想使用Notification Services或其他特定于SQL Server的技术。我可以使用任何解决方案、.NET、Java或任何其他语言,如果这有助于我解决问题的话。首先,我

目前,我使用SQLServer2005轮询windows事件数据库,以确定名为windows_事件的表中的更改,该表具有时间戳字段。查看时间戳,我可以确定行是否更改,但不能确定该行中的哪个字段更改

是否有一些通用的,即独立于数据库的方法来检测字段级别的更改?
我需要它是通用的,因为不知道客户会使用什么数据库,所以我不想使用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条的表。