从用重新提交的IsolationMode锁定的SQL Server表中选择所有行



我的一个客户端会话从事务中在表中创建一个条目,并继续其处理。事务在隔离模式read committed下运行。同时,另一个客户端会话报告表中的所有数据。

由于锁定行(由其他客户端插入),全选操作现在完全锁定。

如何在全选过程中检索提交的数据,而不是完全锁定?

如有任何帮助,我们将不胜感激。

您对您的使用场景并不是很具体,但可以从表中获取数据,只有一些严重的警告

正如marc_s所说,您可以使用READ UNCOMMITTED快照隔离级别,这与在事务中的所有select语句上使用WITH (NOLOCK)具有相同的效果。如果您只想读取该表,但正常处理事务中的所有其他读取,那么最好将NOLOCK提示放在查询中的特定表上。例如:

SELECT *
  FROM firstTable f INNER JOIN
       secondTable s WITH (NOLOCK) on f.Key = s.Key

这将为firstTable发出正常的读取锁定,但读取不带锁定的secondTable。没有锁可能非常危险,因为你可以有效地取出损坏的数据。如果正在执行的插入重新排序数据并导致页面拆分,则可以两次取出同一行,并产生各种类似的不愉快。

因此,这是可能的,但并不理想,您应该警惕这种影响。这里有一些很好的进一步阅读,由Jason Strate提供。

相关内容

最新更新