SQL更改跟踪SYS_CHANGE_COLUMNS

时间:2014-11-20 15:46:51

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

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

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

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

订阅时,已更新的跟踪列设置为true。

这是由于复制的工作方式还是执行整行更新,因此无法在订阅者上进行列级更改吗?

非常感谢任何帮助或替代方法。

由于

1 个答案:

答案 0 :(得分:2)

我意识到这是一个古老的问题,但是因为我遇到了它,我想我也可以为后来的其他人提供答案。

每个列都“更新”时,

SYS_CHANGE_COLUMNS为空。 “更新”这里并不一定意味着值已更改,它只是意味着DML语句触及了列。因此,“update t set c = c”将意味着列c被“更新”。

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