是否可以使用特定事务的 ReadCommitted 隔离级别覆盖 ReadCommittedSnapshot 隔离级别?

Unn*_*n R 2 sql-server isolation-level snapshot-isolation

我的数据库的默认隔离级别是“读提交快照”。请看下面的截图。

读取提交的快照

我的数据库中有包含以下数据的“门票”表。

在此处输入图片说明

现在在连接 1 中,我正在启动一个隔离级别为“已提交读”的新事务。我要将#TicketID“2”的优先级更新为“中等

在此处输入图片说明

从连接 2,我试图访问 #TicketID "2" 的详细信息。并且它仍然从由读取提交的快照隔离创建的版本存储中获取值,这不是预期的行为。

在此处输入图片说明

根据文档,如果事务使用“读提交”隔离级别,则在事务执行提交/回滚之前,任何其他事务都无法访问该行。

谁能告诉我为什么在给定的情况下它没有发生?我也很想知道,为什么事务级别的隔离不能覆盖在数据库级别设置的默认隔离级别(这里是读取提交的快照)?


为了更清楚地说明事务范围上的隔离覆盖,我提供了以下信息。

我已将数据库隔离设置为已提交读。

在此处输入图片说明

现在在连接 1 中,我正在启动我的事务以更新票证优先级。

在此处输入图片说明

在连接 2 中,我正在尝试访问记录。但这不会完成,因为事务隔离级别处于“读提交”模式。

在此处输入图片说明

在连接 3 中,我试图访问隔离级别为“未提交读取”的记录。在这里我们可以看到记录,因为它将覆盖在数据库级别设置的默认隔离。

在此处输入图片说明

当我在数据库级别设置“快照隔离”并在另一个事务范围内覆盖它时,我期待相同的行为。对我来说,它总是从版本存储中返回最后提交的值,而不管事务范围中提到的隔离级别如何。我希望我清楚地表达了我的担忧.. :)

Pau*_*ite 5

无法覆盖整个事务的读取提交快照 (RCSI) 的数据库级设置。

当 RCSI 被设置时,所有读提交的事务将使用行版本,提供行的最后提交版本。

已要求会话级覆盖选项。您可以在AddSET TRANSACTION ISOLATION LEVEL READ COMMITTED LOCK的产品反馈站点上为它投票。

您可以使用表提示覆盖每个语句每个表的设置READCOMMITTEDLOCK

或者,您可以使用快照隔离 (SI) 并关闭已提交读快照隔离 (RCSI)。每个事务会那么无论SET TRANSACTION ISOLATION SNAPSHOTSET TRANSACTION ISOLATION LEVEL READ COMMITTED

有关隔离级别的系列文章中的更多信息。