Die Snapshot-Isolationstransaktion wurde aufgrund eines Aktualisierungskonflikts abgebrochen

Folgende Erklärung:

INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId]) 
  VALUES (@1, @2, @3, @4);
SELECT @@identity;

gibt mir diesen SQL-Fehler 3960:

Die Snapshot-Isolationstransaktion wurde aufgrund eines Aktualisierungskonflikts abgebrochen. Sie können die Snapshot-Isolation nicht verwenden, um direkt oder indirekt auf die Tabelle 'dbo.Companies' in der Datenbank 'myDatabase' zuzugreifen, um die Zeile zu aktualisieren, zu löschen oder einzufügen, die von einer anderen Transaktion geändert oder gelöscht wurde. Wiederholen Sie die Transaktion, oder ändern Sie die Isolationsstufe für die Aktualisierungs- / Löschanweisung.

Soweit ich verstanden habe, sollte ich die Fehlermeldung nicht aktualisieren, löschen oder in eine Tabelle einfügendbo.Companies Während dieser Zeit ändert sich eine andere Verbindungdbo.Companies.

Aber warum kommt es vor, wenn ich eine neue Zeile in eine andere Tabelle eingefügt habe?dbo.Changes (der Fremdschlüssel hat zudbo.Companies) und ich habe die referenzierte Zeile in nicht gelöschtdbo.Companies, aber ich habe gerade die Zeile in aktualisiertdbo.Companies und nicht der Primärschlüssel? Das sollte funktionieren, nicht wahr? (Ist es ein Fehler in SQL Server?)

AKTUALISIEREN:

Die Tabellen sehen folgendermaßen aus:

dbo.Changes([Id] int PK, [Content] nvarchar, 
  [Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)

Das zweite Update macht:

UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;

Antworten auf die Frage(2)

Ihre Antwort auf die Frage