WITH(NOLOCK) 的最佳替代品?

jec*_*for 5 .net sql-server nolock transactions

我正在 C#.Net 中创建一个自我项目,通过使用 3 层应用程序,我不想让我的 sql 语句具有事务性,这些语句用于多个存储过程,我一直在使用 WITH(NOLOCK)方法来查询在事务期间用于插入或更新的那些表,在 C# 方面我一直在使用 TransactionScope,但我最近读到不推荐使用 WITH(NOLOCK),因为它会导致幻像读取或使用脏的和不一致的数据。我的问题是,为了使用在事务期间插入或更新的数据,当涉及到选择时,事务操作方面的最佳方法是什么?无论是数据库端还是业务代码端。

Jak*_*rtz 3

你根本不需要它。如果你修改了一些数据,然后在同一个事务中查询它,你将得到修改后的数据。

您的事务将对修改的数据持有独占锁,因此它可以对其执行任何操作 - 查询、再次修改等。

如果指定WITH(NOLOCK),则允许查询忽略来自其他事务的独占锁。它会导致您的查询返回不正确的数据。