Following statement:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
gives me this SQL error 3960:
Snapshot isolation transaction aborted due to update conflict. You cannot use snapshot isolation to access table 'dbo.Companies' directly or indirectly in database 'myDatabase' to update, delete, or insert the row that has been modified or deleted by another transaction. Retry the transaction or change the isolation level for the update/delete statement.
As far as I understood, from the error message, I should not update, delete, or insert to table dbo.Companies
during the time another connection is modifying dbo.Companies
.
But why it occurs when I was inserting a new row to another table dbo.Changes
(which has foreign key to dbo.Companies
) and I was not deleting the referenced row in dbo.Companies
, but I was just updating row in dbo.Companies
and not the primary key? This should work ok, shouldn't it? (Is it a bug in SQL Server?)
UPDATE:
Tables looks like following:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
Second update is doing:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;