【问题标题】:Implement History Table实现历史表
【发布时间】:2012-02-28 12:03:30
【问题描述】:

我想在我的应用程序中实现历史记录功能,但我想跳过 为每个业务对象数据表创建历史数据表。

我正在考虑创建一个历史数据表,其中包含一个标识列和一个带有更改数据的 XML 列,如下所示

ID: int
XML: Data
Name: data table name

此方法是否由某人实施,或者您是否看到有关此架构的任何限制?

【问题讨论】:

    标签: sql-server sql-server-2008 history


    【解决方案1】:

    多年来,我一直使用这篇文章的修改版本 - Adding simple trigger-based auditing to your SQL Server database

    它使用旧的 INFORMATION_SCHEMA 视图,因为它依赖于在任何较新的 DMV 中都不可用的列位置(例如 sys.tablessys.columns)。除此之外,它会像魅力一样飞行和工作。

    如果性能成为问题(这种情况很少见),您可以考虑使用 Service Broker 实现异步触发器以写入历史记录表。

    【讨论】:

      【解决方案2】:

      由于您使用的是2008,您可以尝试使用Change Data Capture

      【讨论】:

      • 这不适用于历史记录表,因为默认情况下每三天清除一次数据。
      • 可以配置sys.sp_cdc_change_job
      • 但大多数人不知道这就是我提出它的原因
      • 一般来说,变更数据捕获也不会捕获您在历史记录或审计表中需要的所有内容,尤其是如果您想存储谁进行了变更。我们仅使用它来检查我们正在导入的记录是否已被应用程序更改。我们发现,它对于任何其他目的都不够灵活。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多