跟踪何时在SQL中更新表的最佳方法是什么?

时间:2010-02-01 19:43:13

标签: sql sql-server

过去我刚刚为每个表添加了一个字段,并在每次更新/插入时使用GETDATE()进行更新。问题是现在我必须跟踪删除。我想的是只有一个表,我会在发生任何变化时更新,并为所有其他表添加触发器。想法?谢谢!

7 个答案:

答案 0 :(得分:4)

如果您有一个历史记录表(与原始表具有相同列的表,加上一个自动增量ID列),您可以跟踪有关原始表更改的所有内容。您可以跟踪插入,删除和每个更改。使用触发器进行插入,更新和删除以将行放入历史记录表中。如果您不需要所有这些选项,请使用您需要的选项。

如果选择在原始表中使用IsDeleted标志,则会使每个查询复杂化,并使活动表中包含许多不需要的行。但这取决于您的需求。

答案 1 :(得分:1)

我见过使用位字段IsDeleted设计的表格,当然默认值设置为false。删除项目时,此值设置为true。然后,所有查询都需要将其影响:

SELECT blah FROM myTable WHERE IsDeleted=0

这样,如果您“意外”删除了一行,您应该可以将其恢复。您也可以每周/每月/每年清除记录。

这只是一个想法。

答案 2 :(得分:1)

如果您使用的是SQL Server 2008,则可以利用new auditing features

答案 3 :(得分:0)

将记录标记为已删除= 1并且不删除它。在删除时执行触发而不是更新...

答案 4 :(得分:0)

我还看到了一个重复的表,其中添加了标准化的前缀。所有已删除的行都将移动到重复的表中。这消除了保留但忽略原始表中的行的开销。

答案 5 :(得分:0)

所有操作(插入 - 更新 - 删除)都应记录在日志记录表中。我总是记录触发操作的操作,时间戳和用户。将Isdelete列添加到原始表是不好的做法。

答案 6 :(得分:0)

如果您使用的是SQL 2008,则可以使用CDC(更改数据捕获)进行跟踪。

以下链接提供了完整的详细信息。如果要为特定表启用cdc,则会自动删除将要收集的数据。

http://www.simple-talk.com/sql/learn-sql-server/introduction-to-change-data-capture-%28cdc%29-in-sql-server-2008/