捕获列的先前值

时间:2014-05-29 09:58:58

标签: c# asp.net .net

我有一个名为Application的表,其中包含有关应用程序的信息。

 AppID      AppName     AppGroup     AppLocation     TeamSize    GrpSize 
  1         Nestle        Food           UK             6            12
  2         RedBull       Drink          USA            5            15 
  3          Ford        Vehicle         USA            9            25   

现在,当我更新此Application表中的任何行时,我想将值捕获到另一个名为AuditTable的表中。此外,我还需要将TeamSize和GroupSize的先前值捕获到该表中。

对于例如:当我更新第一行时,应该填充下面的审核表值,如下所示。

审核表:

但是Audit表没有OldTeamSize和OldGroupSize列。

AppID   AppName   AppGroup  AppLocation OldTeamSize NewTeamSize OldGrpSize NewGrpSize
  1      Nestle    Food       UK            6            3          12          8

我试图在asp.net c#中实现这个目标。真的很感激任何建议或想法。

2 个答案:

答案 0 :(得分:0)

您可以通过两种方式完成此操作。您可以在更新或使用更新触发器之前先插入AuditTable。

示例1:插入然后更新

INSERT INTO dbo.AuditTable(Column1, Column2,...)
SELECT Column1, Column2, ... FROM dbo.Application WHERE (A filter you'll use when updating)

UPDATE dbo.Application
SET Column1 = NewColumn1Value,
    Column2 = NewColumn2Value
WHERE (Your filter)

示例2:触发 // Google如何编写更新触发器

注意:最好提供您尝试过的代码段。

答案 1 :(得分:0)

目前还不清楚你使用的是哪个DBMS,但我肯定会考虑触发器。 对于MSSQL Server,您可以创建触发器,例如:

CREATE TRIGGER TriggerName
ON Table_Name
AFTER UPDATE
AS
BEGIN
...
..
END

在触发器主体内部,使用“inserted”数据集获取新值,并使用“deleted”获取旧值。例如,您可以使用以下命令将OldGrpSize存储到变量中:

declare @OldGrpSize int = (select OldGrpSize from deleted)

获得旧值和新值后,只需要一个INSERT语句将数据存储到Log表中。

当然,您可以使用.NET和C#,但我相信使用数据库触发器更容易实现。在这种情况下,如果你使用触发器它更安全,它更快(更少的客户端 - 服务器通信),并且它更容易维护。