因此,我们已经开始探索在我们的生产数据库之一上使用变更数据捕获。我们想知道每次更改的日期时间。阅读演练和教程等,似乎标准方法是使用 LSN 与cdc.lsn_time_mapping系统表相关联。这种方法有效,但在谈论每天成千上万的变化时不是很直接也不是很有效。
在测试环境中,我对变更跟踪表进行了以下调整。我发布了一个ALTER TABLE声明,在名为的末尾添加一列并将其设为[__ChangeDateTime]默认值GetDate()。该方法似乎有效,更改跟踪仍然正常运行,正在捕获日期时间。 但是乱搞系统表让我有点紧张。
如果这不是微软从一开始就添加的系统字段,他们一定有他们的理由。既然他们选择了 LSN 到 cdc.lsn_time_mapping 方法,我是否通过这种方式创建自己的 hack 来解决问题?
更新:
在测试期间发现 GetDate() 有时不足以满足我们的需求 - 多个更改同时共享。建议使用sysdatetime() 和 datetime2将值移出到纳秒。显然只有 2008+ 的选项。