【发布时间】:2018-04-03 08:38:20
【问题描述】:
我们有一个每天运行的清除程序。我们使用快照隔离级别。突然我们得到一个错误
错误 3960 - 快照隔离事务由于更新冲突而中止。您不能使用快照隔离直接或间接访问数据库“PROD”中的表“dbo.SXAVWFInboundEventQueue”来更新、删除或插入已被另一个事务修改或删除的行。重试事务或更改更新/删除语句的隔离级别。
下面是过程中的代码。
UPDATE ie
SET ContextDetailID = NULL
from sxavwfinboundeventqueue ie
INNER JOIN #ContextDetailWFInstanceTable TBL on ie.ContextDetailID = TBL.ContextDetailID
我们应该使用子查询来代替这个吗?
UPDATE sxavwfinboundeventqueue
SET ContextDetailID = NULL
where ContextDetailID in (select ContextDetailID from #ContextDetailWFInstanceTable)
临时表的结构如下
CREATE TABLE #ContextDetailWFInstanceTable
(
ContextDetailID bigint not null,
index #ContextDetailWFInstanceTableIndex clustered (ContextDetailID)
)
【问题讨论】:
标签: sql-server sql-server-2014 isolation-level