由于更新冲突,快照隔离事务中止。您不能使用快照隔离直接或间接访问数据库中的表来更新、删除或插入已被另一个事务修改或删除的行。重试事务或更改更新/删除语句的隔离级别。
我读了这里提到的其他问题,但我的有点不同,我只是想用 select 语句读取一些数据,但是如果这些选定的行在外部用另一个事务更新,那么我会遇到冲突错误。
如果我尝试使用LDPLOCK
提示,那么它会起作用,但会减慢它的速度。有什么解决方案吗?
下面的实际例子。
using (SqlConnection cn = new SqlConnection(connectionString))
{
await cn.OpenAsync();
using (SqlTransaction tran = cn.BeginTransaction(System.Data.IsolationLevel.Snapshot))
{
"select top 10 * from Employee where type = 1"
}
}
现在,如果我在完成上述事务提交之前还对员工表执行更新,则会引发上述错误。我不知道为什么,因为它只是选择语句。我阅读了微软的博客,说这会产生问题,但在任何地方都找不到解决方案。
update employee set IsActive = 1 where type = 1