【发布时间】:2014-07-24 09:33:14
【问题描述】:
我想知道为某些表创建历史表并自动将已删除的行移动到具有相同列 + 已删除时间的新表的最佳方法。
例如: 当我从 PRODUCT 表中删除一行时,它将移至 PRODUCT_H 表并删除时间列。
感谢您的宝贵时间。
【问题讨论】:
-
请分享一些您用于删除产品的代码。
标签: c# asp.net asp.net-mvc database entity-framework
我想知道为某些表创建历史表并自动将已删除的行移动到具有相同列 + 已删除时间的新表的最佳方法。
例如: 当我从 PRODUCT 表中删除一行时,它将移至 PRODUCT_H 表并删除时间列。
感谢您的宝贵时间。
【问题讨论】:
标签: c# asp.net asp.net-mvc database entity-framework
最好的选择是在数据库中设置类似的触发器:
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
【讨论】:
最简单的方法是在数据库中实现触发器。
您可以使用CREATE TRIGGER 创建触发器。
您不必担心应用程序代码中的触发器。
触发器应该是AFTER DELETE触发器,只要一行(或几行)被删除,就会执行。
您可以阅读这篇文章,它几乎实现了您所需要的(它实现了一个历史表,但不记录当前日期时间):SQL Server: Coding the After Delete Trigger in SQL Server。事实上,你只需要做一点点改变。在示例中,历史表中的插入使用SELECT * FROM ...。要做你需要的,你只需要像这样添加GETDATE()函数:SELECT *, GETDATE() FROM ...。当然,目标表的末尾必须有这个日期列(如果出现问题,只需指定列名,而不是使用星号)。
任何其他选项都意味着向您的应用程序添加代码,并且需要在您的应用程序和 SQL Server 之间进行额外的通信。
【讨论】: