2011-01-05 53 views
0

我早就问过如何在单列中包装多列,关于同样的问题,但我选择了另一种方法并完成了这一部分。现在需求已经稍微改变了,如果表中的任何字段是更新的,那么查询或触发器将能够检测 - 哪些表具有哪些列以及哪些列。如何在列和表格中保持插入和更新的历史记录?

更新

比如我有表tblAddress列地址,办公电话,手机,城市,国家等。如果用户更新办公电话则查询应能够检测表的地址电话号码有已被更新,并且该消息将被插入到另一个名为tblHistory的表中,其中tblHistory是我的审计跟踪维护表,tblAddress是将执行插入更新或删除操作的地方。

+0

“我希望我的询问很清楚......” - 不是...... – 2011-01-05 10:17:05

+0

请继续..哪部分不清楚......我会解释 – 2011-01-05 10:19:48

+0

恐怕所有的都是不清楚。 – 2011-01-05 11:10:42

回答

2

嘛,有两种基本的模式,你可以使用:

  1. 商店都针对每个审核表(例如tblAddress)在历史表(例如tblAddress_History)列值当审计表中的行已更新。每个历史表将基本上反映其相应审计表的模式(可能还有评论或审计信息,例如何时和由谁进行更新)。
  2. 为历史表(例如tblHistory)中的各个列存储单独的行,供所有审核表使用;当行更新时,您需要在历史记录表中为每个更新的列创建一个单独的行。然后,您的历史记录表将需要包含列以标识审计表和更新列。
+0

+1选项。除非表中有大量的数据,否则我会选择简单的解决方案。 – StefanE 2011-01-05 15:28:00

+0

谢谢,但您提出的方案适用于单个表格。我需要一个动态解决方案,我的前端是使用C#的ASP.Net,在任何表中如果发生插入,更新或删除事件,那么审计跟踪将保留在历史表中。 – 2011-01-06 16:29:08

+0

我概述的第二个解决方案可以适用于任意数量的表格,因此我的资格“您的历史记录表格需要包含列以识别经审计的表格和更新的列。”你可以在你的ASP.NET C#代码中实现审计,或者你可以在你的后端SQL Server代码中实现它(以几种不同的方式)。 – 2011-01-07 16:56:25