因此,我们已经开始探索在我们的一个生产数据库中使用变更数据捕获。我们想知道每次更改的日期时间。通读演练和教程等内容,似乎标准方法是使用LSN与cdc.lsn_time_mapping
系统表相关。当谈论一天中成千上万的变化时,这种方法行得通,但不是很简单,也不是很有效。
在测试环境中,我对变更跟踪表进行了以下调整。我发表了一条ALTER TABLE
声明,在末尾添加一列,[__ChangeDateTime]
并将其设置为默认值GetDate()
。该方法似乎有效,更改跟踪仍然正常运行,捕获了日期时间。 但是混用系统表会让我有些紧张。
如果这不是Microsoft从一开始就添加的系统字段,则必须说明其原因。由于他们改而选择了LSN来cdc.lsn_time_mapping方法,我是否通过以这种方式创建自己的hack来解决问题?
更新:
在测试过程中发现,有时GetDate()不够精确,无法满足我们的需求-多个更改同时共享。建议使用sysdatetime()和datetime2将值移至纳秒级。显然只有2008年以上的选项。