Transakcja izolacji migawki została przerwana z powodu konfliktu aktualizacji
Poniższe oświadczenie:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
podaje mi ten błąd SQL 3960:
Transakcja izolacji migawki została przerwana z powodu konfliktu aktualizacji. Nie można użyć izolacji migawki do dostępu do tabeli „dbo.Companies” bezpośrednio lub pośrednio w bazie danych „myDatabase”, aby zaktualizować, usunąć lub wstawić wiersz, który został zmodyfikowany lub usunięty przez inną transakcję. Ponów próbę transakcji lub zmień poziom izolacji dla instrukcji update / delete.
O ile zrozumiałem, z komunikatu o błędzie nie powinienem aktualizować, usuwać ani wstawiać do tabelidbo.Companies
w czasie modyfikowania innego połączeniadbo.Companies
.
Ale dlaczego występuje, gdy wstawiałem nowy wiersz do innej tabelidbo.Changes
(który ma klucz obcy dodbo.Companies
) i nie usunąłem wskazanego wiersza wdbo.Companies
, ale właśnie aktualizowałem wierszdbo.Companies
a nie klucz podstawowy? To powinno działać dobrze, prawda? (Czy to błąd w SQL Server?)
AKTUALIZACJA:
Tabele wyglądają następująco:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
Druga aktualizacja:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;