当前位置: 首页 > 面试题库 >

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

羊舌昆杰
2023-03-14
问题内容

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

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

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

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

进一步的例子

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

问题答案:

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

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



 类似资料:
  • 问题内容: 我正在尝试创建一个SQL查询,该查询将拉取自Windows函数内的最后一个最大值起的最后5行以来的行数。在下面的示例中,它将为第8行返回2。最大值为12,即从第8行起的2行。 对于第6行,它将返回5,因为7的最大值位于5行之外。 我尝试了以下方法: 这使我达到最大值,但是我无法有效地确定它有多少行。我能够使用SELECT中的多个变量来接近,但这似乎没有效率或可伸缩性。 问题答案: 您可

  • 问题内容: 我能否找出对Oracle数据库中的表执行最后一条INSERT,UPDATE或DELETE语句的时间,如果是,如何执行? 背景知识:Oracle版本为10g。我有一个定期运行的批处理应用程序,可从单个Oracle表中读取数据并将其写入文件中。如果自上次运行作业以来数据未更改,我想跳过此步骤。 该应用程序用C ++编写,并通过OCI与Oracle通信。它以“普通”用户身份登录到Oracle

  • 我试图在我的ubuntu机器上设置一个文件,但是当我试图在保存我刚刚创建的文件之前更改内容时,vim返回错误:自从上次更改后没有写入。 我已经和用户一起创建了这个文件,他试图改变内容,而< code>sudo vim file.ext也不能解决问题。 有人有主意吗? 向你问好,莱尼 编辑: 基本上,我的工作流程是这样的: 在文件中: 之后,我输入,然后出现错误消息。

  • 问题内容: 我已经设置了Jenkins,但是我想找出在当前版本和先前版本之间添加/更改了哪些文件。我想根据是否更改了源树的某些部分来运行一些长期运行的测试。 尽管有人建议使用SVN提交后钩子,但在Internet上搜寻时,我在Hudson / Jenkins中找不到任何提及此功能的地方。也许很简单,每个人(我除外)都知道该怎么做! 这可能吗? 问题答案: 如果您要轮询更改并使用SVN更新,CI服务

  • 问题内容: 有人拥有Jenkins Pipeline脚本,可以将自上一次成功构建以来的所有更改填充到变量中吗?我正在使用git和多分支管道作业。 问题答案: 好吧,我设法把一些东西凑在一起。我敢肯定,您可以更好地迭代数组,但这是我现在所拥有的:

  • 我在Eclipse Indigo(从更新站点)上安装了Acceleo3.3,当我启动Eclipse时,我得到以下消息: “处理Acceleo自上次激活以来的更改”过程中出现内部错误。org.eclipse.core.resources.iworkspace.AddSaveParticipant(ljava/lang/string;lorg/eclipse/core/resources/isaveP