我想知道为某些表创建历史表的最佳方法是什么,并自动将已删除的行移动到具有相同列+删除时间的新表中。
例如: 当我从PRODUCT表中删除一行时,它将移至带有删除时间列的PRODUCT_H表。
感谢您的时间。
答案 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之间进行额外的通信。