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

时间:2018-06-22 20:13:31

标签: sql-server change-data-capture

我有一个启用CDC的表,该表引发以下奇怪的行为。 在一个更新中,三个可为空的列之一已经具有值[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表中获取这些数据。

...
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的桌子是在最好的情况下在公园散步。

1 个答案:

答案 0 :(得分:0)

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

对于varchar(max)…标签列,总会置空。

大对象数据类型 当_ $ operation = 1或_ $ operation = 3时,总是为数据类型image,text和ntext的列分配一个NULL值。数据类型为varbinary(max),varchar(max)或nvarchar(max的列)在__ $ operation = 3 时被分配为NULL值,除非在更新期间更改了该列。当__ $ operation = 1时,将在删除时为这些列分配值。捕获实例中包含的计算列的值始终为NULL。