1

嗨 Stackoverflow 社区,

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

我们有两个链接服务器,都是 Microsoft SQL Server:CRM 和 DW 服务器。CRM系统的一些变化会触发一个程序来立即获取DW服务器的更新,它的工作方式是CRM系统调用DW服务器来更新记录。在我的情况下,来自CRM 和 DW sql 服务器的CRM 系统的更新被称为同时,问题就从这里开始了。

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

读取提交的快照

不幸的是,我们无法更改 CRM sql 服务器上的隔离级别。简单的解释——CRM 来自第三方提供商,他们想限制我们做出这些可能性。

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

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

4

1 回答 1

0

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

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

  • 一个是AFTER INSERT触发器
  • 另一种是在语句之UPDATE​​后的代码块中添加到 DW ,在相同的过程中。在这里,您当然INSERT可以使用SET XACT_ABORT ON,这样如果出现任何故障,整个事务都会回滚。请记住,嵌套事务不是真实的。TRY / CATCH
于 2018-08-23T13:03:19.893 回答