我们正在运行SQL 2008 R2,并已开始探索更改跟踪作为识别导出到数据仓库的更改的方法。我们只对特定列感兴趣。
我们正在识别源数据库的复制副本上的更改。如果我们在源服务器上查询更改表,则可以使用任何特定的列更新,并填充SYS_CHANGE_COLUMNS。
但是,在复制的副本上,正在跟踪更改,但SYS_CHANGE_COLUMNS字段对于更新更改始终为NULL。
订阅时,已更新的跟踪列设置为true。
这是由于复制的工作方式还是执行整行更新,因此无法在订阅者上进行列级更改吗?
非常感谢任何帮助或替代方法。
由于
答案 0 :(得分:2)
我意识到这是一个古老的问题,但是因为我遇到了它,我想我也可以为后来的其他人提供答案。
每个列都“更新”时,SYS_CHANGE_COLUMNS为空。 “更新”这里并不一定意味着值已更改,它只是意味着DML语句触及了列。因此,“update t set c = c”将意味着列c被“更新”。
因此,插入和删除的SYS_COLUMNS_CHANGED值始终为“null”,因为整行受插入或删除的影响。但是,大多数复制技术通过将每个列值设置为复制源上的列值来执行更新。因此,复制“更新”将触及每一列,因此SYS_CHANGE_COLUMNS值将始终为null。