Java 确定sql server中定期更新或插入的行

Java 确定sql server中定期更新或插入的行,java,sql-server,sql-server-2008,Java,Sql Server,Sql Server 2008,如果使用java技术发生任何更改,我将尝试检测某些SQLServer2008表的所有行 我研究了一些方法,如使用时间戳列、更改跟踪机制、更改数据捕获 但上述所有方法都需要在数据库中进行一些定制,如下所示: 1.时间戳列应出现在每个表中 2.更改跟踪要求每个表中都有主键 3.更改数据捕获需要创建一些系统表和其他定制 我需要一些不需要在数据库中进行大量定制的方法,因为数据库是至关重要的,不允许更改配置设置 有人能在这方面提供帮助或建议吗?以下更改可以完成数据审核 为所有txn表创建标识列。 将此标识

如果使用java技术发生任何更改,我将尝试检测某些SQLServer2008表的所有行

我研究了一些方法,如使用时间戳列、更改跟踪机制、更改数据捕获

但上述所有方法都需要在数据库中进行一些定制,如下所示:

1.时间戳列应出现在每个表中

2.更改跟踪要求每个表中都有主键

3.更改数据捕获需要创建一些系统表和其他定制

我需要一些不需要在数据库中进行大量定制的方法,因为数据库是至关重要的,不允许更改配置设置


有人能在这方面提供帮助或建议吗?

以下更改可以完成数据审核

为所有txn表创建标识列。 将此标识数据与事务数据一起提取到前端。 为所有txn表创建历史记录表,并在每个事务之前使用版本ID移动原始数据。 在UI中修改后,将数据传递回数据库,并使用SQL MERGE语句将数据与现有信息进行比较,以执行更新/插入/删除 使用以下逻辑将历史记录表中的最新版本与当前表中的数据进行比较 插入新数据-如果当前表中存在标识键,但在历史记录表的最新版本数据中不可用

其中C.IdentityColumn不在从历史H中选择IdentityColumn中

数据已删除-如果历史记录表的最新版本数据中存在标识键,而当前表中不存在标识键

其中H.IdentityColumn不在当前C的Select IdentityColumn中

数据更新-如果当前表和最新版本的历史记录表中都存在标识键,并且修改了任何一列数据

其中C.IdentityColumn=H.IdentityColumn 和 C.col1h.Col1 或 C.Col2 H.Col2 或 C.ColN H.ColN

C-当前表格 H-历史表


使用上述逻辑,可以在单独的审核表中跟踪修改后的数据,该表可以有记录ID、字段名、旧值、新值、修改、修改人、修改日期/时间等列

使用触发器如何?您是否见过触发器与CDC类似,您需要创建触发器以及存储更改所需的任何转储表。对于使用java技术进行的任何更改,我能看到的最好方法是,如果您的所有java软件都使用一些特定的SQL登录名/仅为他们保留的用户,并在每次触发器/存储信息的任何内容存储时获取这些信息。不,我不允许编写任何类型的触发器。正如我所说,我只能对数据库进行轻量级的更改,不能实现触发器和代码。