gpt4 book ai didi

sql - 确定自上次访问 SQL Server 以来的行更改

转载 作者:行者123 更新时间:2023-12-03 01:18:02 25 4
gpt4 key购买 nike

我们有一个多用户系统,用户将数据保存到中央 SQL Server 2005 数据库中。我们遇到了一个问题,即一个用户刷新数据库中的更改,而另一个用户保存新数据。我们当前收集更改的方式是每个表上都有一个时间戳列,该列在每行插入/更新时都会填充。另一个用户将在客户端上存储一个时间戳,这是他最后一次从数据库中提取数据的时间。

每次保存都是在一个事务中完成的。我们正在处理的示例如下:

  • User1 开始保存,打开事务并插入/修改行,更改其时间戳。
  • 用户 2 在用户 1 提交更改之前从数据库刷新,以某种方式导致用户 2 的时间戳更新。
  • 用户 1 提交事务和所有更改。
  • 用户 2 再次从数据库刷新,但由于其时间戳之前已更新,因此只有用户 1 提交并拉入的更改的后半部分会导致错误和应用程序崩溃。

这让我们认为时间戳不一定是确定自前端系统上次访问以来数据库更改的最佳方法。更好的解决方案是什么?

更多示例

  • User1 开始保存,打开事务并插入/修改行并更新其时间戳。
  • 用户 2 开始另一次保存,打开事务,插入/修改其他行并更新其时间戳,然后提交事务。
  • User3 从数据库刷新并提取 User2 提交的所有数据,将其 LastRefreshTimestamp 更新为 User2 在数据库中创建的最后一个时间戳。
  • User1 提交他的交易。
  • 用户 3 再次从数据库刷新,但根据其 LastRefreshTimestamp 提取用户 2 的事务结束与用户 1 的事务结束之间的所有更改,从而错过了用户 2 的事务开始之前用户 1 的事务提交的所有更改。

最佳答案

有趣的问题,我想不出一个简单干净的基于 T-SQL 的解决方案,但这正是 SQL 2008 中的更改跟踪创建的同步挑战类型... http://msdn.microsoft.com/en-us/library/bb933875.aspx

此博客/文章中对变更跟踪与变更数据捕获进行了很好的高度概述:http://blogs.technet.com/b/josebda/archive/2009/03/24/sql-server-2008-change-tracking-ct-and-change-data-capture-cdc.aspx

如果您的总体目标是保留存储库的客户端副本,您可以将其与 Microsoft Sync Framework 结合使用:http://msdn.microsoft.com/en-us/sync/bb887608

关于sql - 确定自上次访问 SQL Server 以来的行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com