【发布时间】:2015-10-05 14:07:09
【问题描述】:
我在 C#.Net 中创建一个自我项目,通过使用 3 层应用程序,我不想让我的 sql 语句具有事务性,这些语句用于多个存储过程,我一直在使用 WITH (NOLOCK) 方法来查询那些在事务期间用于插入或更新的表,在 C# 端我一直在使用 TransactionScope,但我最近读到不推荐使用 WITH(NOLOCK),因为它可以导致幻读或使用脏数据和不一致数据。我的问题是,为了使用在事务期间插入或更新的数据,当涉及到选择时,在事务操作方面最好的方法是什么?无论是数据库端还是业务代码端。
【问题讨论】:
-
我认为如果您想要全面的答案,最好在 DBA 社区中询问这个问题。 dba.stackexchange.com
-
最好的“替代方案”就是将其删除。事务中的任何数据移动在该事务中仍然可见。
-
如果无等待读取对您很重要,请考虑使用快照隔离;但它有自己的蠕虫袋,所以要小心先研究它。
标签: .net sql-server transactions nolock