0

由于更新冲突,快照隔离事务中止。您不能使用快照隔离直接或间接访问数据库中的表来更新、删除或插入已被另一个事务修改或删除的行。重试事务或更改更新/删除语句的隔离级别。

我读了这里提到的其他问题,但我的有点不同,我只是想用 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
4

1 回答 1

0

结果我无法对快照隔离事务中使用的表进行更新。我将表一分为二,将需要更新的列移到第二个表中,并且没有添加任何 FK 关系。它解决了问题。

于 2019-02-12T09:07:18.253 回答