【问题标题】:SQL Change tracking SYS_CHANGE_COLUMNSSQL 更改跟踪 SYS_CHANGE_COLUMNS
【发布时间】:2015-01-18 13:22:09
【问题描述】:

我们正在运行 SQL 2008 R2,并已开始探索将更改跟踪作为我们识别更改以导出到我们的数据仓库的方法。我们只对特定列感兴趣。

我们正在识别源数据库的复制副本上的更改。如果我们在源服务器上查询更改表,任何特定的列更新都是可用的,并且 SYS_CHANGE_COLUMNS 被填充。

但是,在复制副本上,更改正在被跟踪,但 SYS_CHANGE_COLUMNS 字段对于更新更改始终为 NULL。

更新的跟踪列在订阅者上设置为 true。

这是由于复制的工作方式以及它正在执行整行更新,因此您无法获得订阅者的列级别更改吗?

任何帮助或替代方法将不胜感激。

谢谢

【问题讨论】:

    标签: sql-server change-tracking transactional-replication


    【解决方案1】:

    我意识到这是一个老问题,但由于我遇到过这个问题,我想我不妨为以后来的其他人提供一个答案。

    当每一列都“更新”时,SYS_CHANGE_COLUMNS 为空。这里的“更新”并不一定意味着值已更改,它只是表示 DML 语句触及了该列。因此,“update t set c = c”表示 c 列已“更新”。

    因此,插入和删除的 SYS_COLUMNS_CHANGED 值始终为“null”,因为整行都受到插入或删除的影响。但是大多数复制技术通过将每个列的值设置为复制源上列的值来进行更新。因此,复制“更新”将触及每一列,因此 SYS_CHANGE_COLUMNS 值将始终为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多