CDC 跟踪对未更改的列所做的更改

CDC tracking changes made to a column that wasn't changed

我有一个启用了 CDC 的 table,它引发了以下奇怪的行为。 在三个可为空的列之一已经具有值 [8,23|NULL|NULL] 并且我更新 其他两列 [AlexJ, 1] 的更新中,CDC 跟踪所有三列的更改.

2018-06-22 13:55:37.763 NULL    NULL    NULL 
2018-06-22 13:55:37.763 8,23    AlexJ   1

我使用模板化查询从 cdc.dbo_Tablename_CT table 中获取这些数据。

...
SELECT sys.fn_cdc_map_lsn_to_time([__$start_lsn]) AS 'ModifiedDate', 
    [Tags],[ModifiedBy], [IsInactive]
FROM cdc.fn_cdc_get_all_changes_dbo_Tablename
    (@from_lsn, @to_lsn, N'all update old')
WHERE Id = @Id
...

我该如何解决这个问题?这是最烦人的,可能会让我远离使用 CDC,而不是部署和维护 CDC'ed table 在最好的时候在公园里散步。

https://docs.microsoft.com/en-us/sql/relational-databases/system-tables/cdc-capture-instance-ct-transact-sql?view=sql-server-2017

它总是会为 varchar(max) 放置 null ... tags 列。

大对象数据类型 当 _$operation = 1 或 _$operation = 3 时,数据类型 image、text 和 ntext 的列始终分配 NULL 值。数据类型 varbinary(max)、varchar(max) 或 nvarchar 的列(max) 在 __$operation = 3 时被分配一个 NULL 值,除非列在更新期间发生变化。当 __$operation = 1 时,这些列在删除时被赋予它们的值。捕获实例中包含的计算列始终具有 NULL 值。