删除后将数据移动到历史表

时间:2014-07-24 09:33:15

标签: c# asp.net asp.net-mvc database entity-framework

我想知道为某些表创建历史表的最佳方法是什么,并自动将已删除的行移动到具有相同列+删除时间的新表中。

例如: 当我从PRODUCT表中删除一行时,它将移至带有删除时间列的PRODUCT_H表。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

最好的选择是在数据库中设置触发器:

    CREATE TRIGGER movetohistorical
        ON dbo.PRODUCT 
        FOR DELETE
    AS

    INSERT Product_H
    SELECT * FROM dbo.PRODUCT 
    WHERE PRODUCT.id IN(SELECT deleted.id FROM deleted)


GO

答案 1 :(得分:0)

最简单的方法是在数据库中实现触发器。

您可以使用CREATE TRIGGER创建触发器。

您不必担心应用程序代码中的触发器。

触发器应该是AFTER DELETE触发器,只要删除了一行(或多行),它就会执行。

您可以阅读本文几乎实现您所需的内容(它实现了历史表,但不记录当前日期时间):SQL Server: Coding the After Delete Trigger in SQL Server。事实上,你只需做一点改变。在示例中,histroy表中的插入使用SELECT * FROM ...。要执行您需要的操作,您只需添加GETDATE()函数,如下所示:SELECT *, GETDATE() FROM ...。当然,目标表必须在最后有这个日期列(如果出现问题,只需指定列名,而不是使用星号)。

任何其他选项都意味着向您的应用程序添加代码,并且需要在您的应用程序和SQL Server之间进行额外的通信。