如下声明:快照隔离事务中止由于更新冲突
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
给我这个SQL错误3960:
中止由于更新冲突快照隔离事务。您 无法使用快照隔离直接访问表'dbo.Companies' 或间接在数据库'myDatabase'中更新,删除或插入 已由其他事务修改或删除的行。 重试事务或更改 更新/删除语句的隔离级别。
据我理解,从该错误消息,我不应该更新,删除,或在另一连接正在修改dbo.Companies
的时间插入到表dbo.Companies
。
但为什么当我插入新行到另一个表dbo.Changes
(有外键dbo.Companies
),我并没有在dbo.Companies
删除引用的行,但我只是更新在dbo.Companies
行,而不是主要发生键?这应该可以,不是吗? (它是在SQL Server中的错误?)
UPDATE:
表看起来如下:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
二更新是这样做的:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;
谢谢你的提示,但它似乎没有帮助。 –
这两个语句(INSERT和UPDATE)是指同一个客户?如果是这样,就我所知,我们运气不好。 –
是的,插入正在使用当前正在更新的公司的ID。 –