seguente dichiarazione:Snapshot transazione di isolamento interrotta a causa di aggiornare conflitto
INSERT INTO dbo.Changes([Content], [Date], [UserId], [CompanyId])
VALUES (@1, @2, @3, @4);
SELECT @@identity;
mi dà questo errore SQL 3960:
transazione di isolamento dello snapshot interrotta a causa di aggiornare il conflitto. L'utente non può utilizzare l'isolamento dell'istantanea per accedere alla tabella "dbo.Companies" direttamente o indirettamente nel database "myDatabase" per aggiornare, eliminare o inserire la riga che è stata modificata o eliminata da un'altra transazione. Riprovare la transazione o modificare il livello di isolamento per l'istruzione di aggiornamento/eliminazione .
Per quanto ho capito, dal messaggio di errore, non è necessario aggiornare, cancellare, o inserire la tabella dbo.Companies
durante il tempo un'altra connessione sta modificando dbo.Companies
.
Ma perché si verifica quando ero inserendo una nuova riga di un'altra tabella dbo.Changes
(che ha chiave esterna a dbo.Companies
) e non mi eliminazione della riga riferimento nella dbo.Companies
, ma ero solo aggiornando riga dbo.Companies
e non il primario chiave? Questo dovrebbe funzionare ok, non dovrebbe? (Si tratta di un bug in SQL Server?)
UPDATE:
tabelle si presenta come segue:
dbo.Changes([Id] int PK, [Content] nvarchar,
[Date] datetime, [UserId] int, [CompanyId] int -> dbo.Companies.[Id])
dbo.Companies([Id] int PK, [Name] nvarchar)
Secondo aggiornamento sta facendo:
UPDATE dbo.Companies WHERE [Id] = @1 SET [Name] = @2;
Grazie per i suggerimenti, ma non sembra essere d'aiuto. –
Le due istruzioni (INSERT e UPDATE) si riferiscono allo stesso cliente? Se è così, siamo sfortunati per quanto ne so. –
Sì, inserire sta utilizzando l'id della società attualmente in aggiornamento. –