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

2024-05-26

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

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

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

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

进一步的例子

  • User1 开始保存,打开事务并插入/修改行并更新其时间戳。
  • User2 开始另一个保存,打开一个事务,插入/修改其他行更新其时间戳,然后提交他的事务。
  • 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://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 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 http://msdn.microsoft.com/en-us/sync/bb887608

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定自上次访问 SQL Server 以来的行更改 的相关文章

随机推荐

  • Aurelia 验证规则:无法解析访问器函数

    看来其他地方也存在各种问题aurelia validation模块 但我还没有看到任何可以解决我遇到的具体问题的内容 我有一个模型类 其定义和验证规则如下 我的模型 js my model name full short Validatio
  • 将 3D 场景导入babylonJS

    所以我今天读到巴比伦JS http blogs msdn com b eternalcoding archive 2013 06 27 babylon js a complete javascript framework for build
  • Django ORM:检索帖子和最新评论而不执行 N+1 查询

    我有一个非常标准的基本社交应用程序 具有状态更新 即帖子 和每个帖子的多个评论 给定以下简化模型 是否可以使用 Django 的 ORM 高效检索所有帖子以及最新两条评论与每个帖子关联 而不执行 N 1 查询 也就是说 无需执行单独的查询来
  • 设备锁定时扫描外围设备

    我的中央管理器可以在前台和后台检测新的外围设备 我知道这一点是因为当它发现新的外围设备时我会触发 UNNotification 但是 当设备锁定时 它似乎不会继续扫描新的外围设备 在我的能力范围内 我启用了使用 LE 配件的后台模式以及远程
  • 使用管道将文件夹从 Bitbucket 存储库推送到公共服务器

    我在 Bitbucket 存储库中启用了管道 并且需要在每次构建后在我的服务器中运行 Angular 2 构建并部署 dist 文件夹 在执行构建命令后创建 我的 bitbucket pipelines yml 文件中有以下内容 image
  • 简单的 svg css 进度圈

    我正在尝试寻找一种方法来实现没有动画的简单进度圈 静态 我发现的示例具有非常不同的百分比偏移量 如下例所示 如何以这样的方式制作进度圈 如果我提供偏移量为 50 那么它恰好是 50 半填充 u absoluteCenter position
  • 设计涟漪

    我正在尝试使用以 riak 作为数据库的设备创建身份验证 我找到了同样的 ORM 策略https github com frank06 devise ripple https github com frank06 devise ripple
  • Nginx 和 Flask-socketio Websockets:存在但没有消息传递?

    我在让 Nginx 与 Python Flask socketio 库 基于 gevent 很好地配合时遇到了一些麻烦 目前 由于我们正在积极开发 我正在尝试让 Nginx 充当代理 对于发送页面 我可以通过直接运行flask socket
  • .NET 的符号数学

    我正在寻找 NET 框架的符号数学库 我看过Math net 但它还不是可用的 您知道是否还有其他图书馆存在吗 这可能有点过分了 但你可以和数学 http www wolfram com products mathematica index
  • 根据值从绿色到红色[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个在 vb net 中返回从红色 值 0 到绿色 值 100 的颜色的函数 另外 我需要一种方法来确定字体的颜色应该是白色还是
  • Git 将开发分支与生产版本的主分支合并

    我正在使用 Git 进行代码版本控制 我有一个开发分支 我正在其中进行所有肮脏的开发 每次我向世界发布生产版本时 我都想将其放在我的 master 分支下 问题是 每当我合并开发和 master 时 master 都会收到所有开发历史记录
  • 使用 Elixir 生成首字母头像 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发 Elixir 并希望提供头像服务 如果用户没有头像 可以制作一个带有他们姓名首字母缩写的头像 如下所示 我真的不知道从哪里
  • NHibernate HQL 相当于 T-SQL 的 TOP 关键字

    NHibernate HQL 相当于 T SQL 的 TOP 关键字是什么 另外 用非 HQL 方式说 给我一门课的前 15 个 是什么意思 在 HQL 中这实际上非常简单 var top15 session CreateQuery fro
  • 重置 PK 自动增量列

    我已经多次导入数千条记录 以确保导入完美运行 结果 现在当我在发布前进行实时导入时 自动增量列的 ID 列约为 300 000 一旦我删除了这些表中的所有数据 是否有任何简单的方法可以 重置 此设置 我只想出于 SEO 的原因 URL Fo
  • 用 C 重写我用 C++ 编写的通用函数的最佳方法是什么?

    Prints out a given array template
  • 多个 BrowserRouter 显示多个组件

    我想用basename来分离组件 我也有全局 url 所以我最终使用了 3 个BrowserRouters 这会导致显示多个内容 如果我去 fruit search 它会显示以下内容Homepage组件和FruitSearch成分 我究竟如
  • Laravel - 获取每个 UID 类型的最后一个条目

    我有一个表 其中包含 1000 多种不同产品的 100 个条目 每个条目都由唯一的 UID 标识 ID UID MANY COLUMNS CREATED AT 1 dqwdwnboofrzrqww1 2018 02 11 23 00 43
  • 如何确定代码是否在信号处理程序上下文中运行?

    我刚刚发现有人正在从信号处理程序调用我编写的绝对不是异步信号安全的函数 所以 现在我很好奇 如何避免这种情况再次发生 我希望能够轻松确定我的代码是否在信号处理程序上下文中运行 语言是 C 但该解决方案不适用于任何语言吗 int myfunc
  • iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间

    我知道视频类型问题的持续时间之前已得到解答 但我在获取视频持续时间方面遇到了真正的麻烦 mp4文件通过使用AVAsset and by AVURLAsset 我正在使用以下代码 NSString itemPathString NSSearc
  • 确定自上次访问 SQL Server 以来的行更改

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