快照更新事务由于更新冲突而中止。您 无法使用快照隔离来直接或间接访问表 在数据库中更新,删除或插入已经存在的行 被另一笔交易修改或删除。重试交易或 更改更新/删除语句的隔离级别。
我读了这里提到的其他问题,但是我的有点不同,我只是想用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"
}
}
现在,如果在完成上述转换提交之前我还对employee表执行更新,它将引发以上错误。我不知道为什么,因为这只是select语句。我读过Microsoft博客,这会造成问题,但在任何地方都找不到解决方案。
update employee set IsActive = 1 where type = 1
答案 0 :(得分:0)
结果是我无法对快照隔离事务中正在使用的表进行更新。我将表分成两部分,将需要更新的列移到第二张表中,并且未添加任何FK关系。它解决了问题。