以下陈述:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
给了我这个 SQL 错误 3960:
由于更新冲突,快照隔离事务中止。您不能使用快照隔离直接或间接访问数据库“myDatabase”中的表“dbo.Companies”来更新、删除或插入已被另一个事务修改或删除的行。重试事务或更改更新/删除语句的隔离级别。
据我了解,从错误消息中,我不应该dbo.Companies
在另一个连接正在修改期间更新、删除或插入表dbo.Companies
。
但是为什么当我向另一个表dbo.Changes
(具有外键dbo.Companies
)插入新行并且我没有删除引用的行时会发生这种情况dbo.Companies
,但我只是更新行dbo.Companies
而不是主键?这应该可以正常工作,不是吗?(这是 SQL Server 中的错误吗?)
更新:
表格如下所示:
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;