【发布时间】:2018-06-22 20:13:31
【问题描述】:
我有一个启用了 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 的表在最好的时候是在公园里散步。
【问题讨论】:
-
您确定它没有更新吗?你能发布你的更新声明吗?它不跟踪实际数据更改,它跟踪更新语句。所以将其更新为相同的值与更改值相同。
-
阳性。我首先注意到它使用 EF 核心 Linq 更新,然后使用 SSMS 中的“编辑 200 行”数据编辑器,然后编写了一个仅包含两列的原始更新语句。各方面的行为都是一样的。
-
EF 和 Edit top 200 都会更新每一列。
-
那么为什么其他列不显示在 CT 表更改中?因为它们不可为空?即使 EF “更新”每一列,如果值相同,它真的是 CDC 的吗?
标签: sql-server change-data-capture