Transação de isolamento de instantâneo interrompida devido a um conflito de atualização
Declaração seguinte:
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
me dá este erro de SQL 3960:
Transação de isolamento de instantâneo interrompida devido ao conflito de atualização. Não é possível usar o isolamento de instantâneo para acessar a tabela 'dbo.Companies' direta ou indiretamente no banco de dados 'myDatabase' para atualizar, excluir ou inserir a linha que foi modificada ou excluída por outra transação. Tente novamente a transação ou altere o nível de isolamento para a instrução update / delete.
Tanto quanto eu entendi, a partir da mensagem de erro, eu não deveria atualizar, excluir ou inserir a tabeladbo.Companies
durante o tempo que outra conexão está modificandodbo.Companies
.
Mas porque ocorre quando eu estava inserindo uma nova linha em outra tabeladbo.Changes
(que tem chave estrangeira paradbo.Companies
) e eu não estava excluindo a linha referenciada emdbo.Companies
, mas eu estava apenas atualizando linha emdbo.Companies
e não a chave primária? Isso deve funcionar bem, não deveria? (É um bug no SQL Server?)
ATUALIZAR:
Tabelas parece com o seguinte:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
Segunda atualização está fazendo:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;