Следующее утверждение:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
дает мне эту ошибку SQL 3960:
Транзакция изоляции моментального снимка прервана из-за конфликта обновления. Ты нельзя использовать изоляцию моментальных снимков для прямого доступа к таблице «dbo.Companies» или косвенно в базе данных myDatabase для обновления, удаления или вставки строка, которая была изменена или удалена другой транзакцией. Повторите транзакцию или измените уровень изоляции для оператор обновления/удаления.
Насколько я понял из сообщения об ошибке, я не должен обновлять, удалять или вставлять в таблицу dbo.Компании
в то время, когда другое соединение модифицирует 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;