C# 删除后将数据移动到历史表
我想知道为某些表创建历史表并自动将删除的行移动到具有相同列+删除时间的新表的最佳方法是什么 例如: 当我从产品表中删除一行时,它将移动到带有已删除时间列的产品表C# 删除后将数据移动到历史表,c#,asp.net,asp.net-mvc,database,entity-framework,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
谢谢您的时间。最好的选择是在数据库中设置触发器,如下所示:
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
最简单的方法是在数据库中实现触发器 您可以使用创建触发器 您不必担心应用程序代码中的触发器 触发器应该是删除后的
触发器
触发器,每当删除一行(或多行)时将执行该触发器
您可以阅读这篇文章,它几乎实现了您需要的内容(它实现了一个历史表,但不记录当前日期时间):。事实上,你只需要做一点改变。在示例中,histroy表中的插入使用SELECT*FROM…
。要执行所需操作,只需添加如下函数:SELECT*,GETDATE()FROM…
。当然,目标表的末尾必须有这个日期列(如果出现问题,只需指定列名,而不是使用星号)
任何其他选项都意味着要向应用程序中添加代码,并且需要在应用程序和SQL Server之间进行额外的通信。请共享一些用于删除产品的代码。是的,这是最好的方法,但仅当您希望在SQL Server中执行操作时才适用。如果要在外部服务器(例如应用程序服务器)上记录此操作,这将无法满足您的要求。即使您使用EF删除行,触发器也会触发