tsql 在打开"已提交读取快照"的情况下等待更改



嗨,Stackoverflow社区,

让我寻求你的帮助,因为我确实遇到了一个关键问题。

我们有两个链接服务器,都是Microsoft SQL服务器:CRM和DW服务器。CRM系统中的一些更改会触发一个程序来立即获取DW服务器的更新,其工作方式是CRM系统调用DW服务器来更新记录。就我而言,来自CRM系统的CRM和DW SQL服务器的更新称为同时更新,问题开始了。

DW服务器尝试读取更改,并仅在事务开始之前获取记录。是的,发生这种情况是因为 CRM 服务器使用:

读取已提交的快照

遗憾的是,我们无法更改 CRM sql 服务器上的隔离级别。简单的解释- CRM来自第三方提供商,他们希望限制我们实现这些可能性。

有没有其他方法,等待事务提交,然后在承诺后读取最新数据?

如果缺少信息,请告诉我,然后我会提供更多见解。

我不明白这里的控制流,但是从第一段开始,您说CRM中的更新会触发更新DW服务器的流程。因此,我看不出DW服务器如何在CRM服务器之前进行更新。您说它们是同时调用的,但这会否定有关触发器的评论。 您不希望 DW 获得脏读,因此 READ COMMIT SNAPSHOT 在这里是一个不错的选择,但您也可以在事务级别指定所需的任何隔离级别并覆盖服务器默认值。

既然你问"有没有办法等待事务提交,然后在承诺后读取最新数据?当然,这可以通过几种方式处理...

  • 一个是插入后触发器
  • 另一种方法是在同一过程中将UPDATE添加到 DW 中INSERT语句之后的代码块中。在这里,您可以使用TRY / CATCH,当然还有 SET XACT_ABORT ON,以便在出现任何失败时,整个事务都会回滚。请记住,嵌套事务不是真实的。

相关内容

最新更新