Transacción de aislamiento de instantánea abortada debido a conflicto de actualización
La siguiente oración:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
me da este error de SQL 3960:
Transacción de aislamiento de instantánea abortada debido a conflicto de actualización. No puede usar el aislamiento de instantáneas para acceder a la tabla 'dbo.Companies' directa o indirectamente en la base de datos 'myDatabase' para actualizar, eliminar o insertar la fila que ha sido modificada o eliminada por otra transacción. Vuelva a intentar la transacción o cambie el nivel de aislamiento para la declaración de actualización / eliminación.
Por lo que entendí, desde el mensaje de error, no debo actualizar, eliminar o insertar en la tabladbo.Companies
Durante el tiempo se está modificando otra conexión.dbo.Companies
.
Pero ¿por qué ocurre cuando estaba insertando una nueva fila en otra tabla?dbo.Changes
(que tiene clave extranjera paradbo.Companies
) y no estaba borrando la fila referenciada endbo.Companies
, pero acabo de actualizar fila endbo.Companies
¿Y no la clave principal? Esto debería funcionar bien, ¿no es así? (¿Es un error en SQL Server?)
ACTUALIZAR:
Las tablas se parecen a las siguientes:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
La segunda actualización está haciendo:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;