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

时间:2014-03-20 07:48:29

标签: java sql-server sql-server-2008

如果使用java技术发生任何更改,我会尝试检测某些 sql server 2008 表的所有行。

我调查了一些方法,例如使用时间戳列,更改跟踪机制,更改数据捕获。

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

  

1.Timestamps列应出现在每个表中。

     

2.更改跟踪需要每个表中的主键。

     

3.Change Data Capture需要创建一些系统表和其他自定义。

我需要一些方法,在数据库中不需要如此繁重的自定义,因为数据库是至关重要的,不允许更改配置设置。

有人可以帮助或建议这方面的事情吗?

1 个答案:

答案 0 :(得分:0)

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

  1. 为所有txn表创建标识列。
  2. 将此身份数据与交易数据一起提取到前端。
  3. 为所有txn表创建历史记录表,并使用版本ID在每次事务之前移动原始数据。
  4. 在UI中修改后,将数据传递回数据库,并使用SQL MERGE语句将数据与现有信息进行比较,以执行更新/插入/删除
  5. 使用以下逻辑
  6. 将历史记录表中可用的最新版本与当前表中的数据进行比较

    已插入新数据 - 如果当前表中存在标识密钥且在历史表的最新版本数据中不可用

    在哪里C.IdentityColumn NOT IN(从历史H中选择identitycolumn)

    删除数据 - 如果历史表的最新版本数据中存在标识密钥,则当前表中不存在。

    H.IdentityColumn NOT IN(从当前C中选择identitycolumn)

    数据已更新 - 当前表和最新版本的历史记录表中都存在IF身份密钥,并且修改了任何一个列数据

    WHERE(C.IdentityColumn = H.IdentityColumn) 和 ( C.Col1< C. H.Col1 要么 C.Col2< Col2> H.Col2 要么 C.ColN<> H.ColN )

    C - 当前表格 H - 历史表

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