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