【问题标题】:How to store CHANGE_TRACKING_CURRENT_VERSION when using SQL Server Change Tracking?使用 SQL Server 更改跟踪时如何存储 CHANGE_TRACKING_CURRENT_VERSION?
【发布时间】:2023-03-31 06:41:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql-server change-tracking sql-server-2019


    【解决方案1】:

    事实证明,我还错误地在第二个表上启用了更改跟踪,我在该表中存储了以前的更改跟踪版本。这导致了我描述的问题。在意识到这一点并在不需要的表上禁用更改跟踪后,我不再遇到问题。

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      相关资源
      最近更新 更多