使用 SQL 服务器更改跟踪时如何存储 CHANGE_TRACKING_CURRENT_VERSION?

How to store CHANGE_TRACKING_CURRENT_VERSION when using SQL Server Change Tracking?

我在单个 table 上使用 SQL 服务器 (15) 中的更改跟踪。我的客户端应用程序每 x 分钟 运行s 检查 table 数据是否已更改以使某些缓存无效。在单个 t运行saction 中,客户端首先获取当前更改跟踪版本 (CHANGE_TRACKING_CURRENT_VERSION()),然后查询与客户端之前 运行 时相比的更改。客户端知道 CHANGE_TRACKING_CURRENT_VERSION() 的先前值是什么,因为它在 运行 成功后将其值存储在单独的 table(同一数据库的)中。所以当客户端完成后,客户端会用当前版本覆盖之前的更改跟踪版本。

为了避免在没有任何更改时使缓存无效,客户端会检查更改跟踪版本是否比以前大。但是,由于客户端将以前的更改跟踪版本存储在数据库本身中(这会导致版本递增),因此当前的更改跟踪版本将始终大于存储的以前的更改跟踪版本。

例如,假设存储版本为 5,当前版本为 6。客户端将 运行 并最终用当前版本覆盖存储版本。现在存储的值为 6,但是因为存储这个值被 SQL Server Change Tracking 认为是一个更改,当前版本的更改跟踪将变为 7。在下一个 运行,客户端将再次 运行(因为7大于6)最终会再次用当前版本覆盖存储的版本。会一直这样下去。

有没有办法解决这个问题,而不必将以前的更改跟踪版本存储在不同的数据库中?

原来我错误地在第二个 table 上启用了更改跟踪,我在其中存储了以前的更改跟踪版本。这导致了我描述的问题。在意识到这一点并在不需要它的 table 上禁用更改跟踪后,我不再有问题了。