【问题标题】:How to maintaing history of inserts and update in both column and table wise?如何在列和表中维护插入和更新的历史记录?
【发布时间】:2011-01-05 10:14:34
【问题描述】:

我早些时候曾在 SO 中询问过,如何将多列包装在单列中,同样如此,但我选择了另一种方法并完成了那部分。现在要求已经稍微改变了,如果表中的任何字段被更新,那么查询或触发器将能够检测到 - 哪些表有哪些列。

更新

例如,我的表 tblAddress 具有列 Address、WorkPhone、CellPhone、City、State 等。如果用户更新 WorkPhone,则查询应该能够检测到表地址中的电话号码已更新,并且将插入消息到另一个名为 tblHistory 的表,其中 tblHistory 是我的审计跟踪维护表,而 tblAddress 是执行插入更新或删除操作的位置。

【问题讨论】:

  • “我希望我的查询很清楚......” - 它不是......
  • 请继续..哪个部分不清楚...我会解释
  • 恐怕都不清楚。
  • 那么您是否正在寻找某种方法来审核对表中数据的所有更改?

标签: asp.net sql-server c#-4.0


【解决方案1】:

嗯,您可以使用两种基本模式:

  1. 当更新审计表中的行时,将所有列值存储在每个审计表(例如 tblAddress)的历史表(例如 tblAddress_History)中。每个历史记录表基本上都会反映其对应的已审计表的架构(可能还包括评论或审计信息,例如更新的时间和人员)。
  2. 为所有审计表的历史表(例如 tblHistory)中的各个列存储单独的行;更新行时,您需要在历史记录表中为更新的每一列创建单独的行。然后,您的历史记录表需要包含用于识别已审计表和更新列的列。

【讨论】:

  • +1 选项号 1.. 除非表中有大量数据,否则我会选择简单的解决方案。
  • 谢谢,但您建议的方案对单表有效。我需要一个动态解决方案,我的前端是带有 C# 的 ASP.Net,如果在任何表中发生插入、更新或删除事件,那么审计跟踪将保留在历史表中。
  • 我概述的第二个解决方案可以适用于任意数量的表,因此我的资格是“您的历史表将需要包含用于识别已审计表和更新列的列。”您可以在 ASP.NET C# 代码中实现审核,也可以在后端 SQL Server 代码中实现它(以几种不同的方式)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2012-03-06
  • 1970-01-01
相关资源
最近更新 更多