invece di sotto Codice
BEGIN
INSERT INTO EmailsRecebidos (De, Assunto, Data)
VALUES (@_DE, @_ASSUNTO, @_DATA)
WHERE NOT EXISTS ( SELECT * FROM EmailsRecebidos
WHERE De = @_DE
AND Assunto = @_ASSUNTO
AND Data = @_DATA);
END
sostituire con
BEGIN
IF NOT EXISTS (SELECT * FROM EmailsRecebidos
WHERE De = @_DE
AND Assunto = @_ASSUNTO
AND Data = @_DATA)
BEGIN
INSERT INTO EmailsRecebidos (De, Assunto, Data)
VALUES (@_DE, @_ASSUNTO, @_DATA)
END
END
Aggiornato : (grazie a @Marc Durdin per la segnalazione)
Si noti che sotto carico elevato, questo a volte fallirà ancora, perché una seconda connessione può superare il test IF NOT EXISTS prima che la prima connessione esegua INSERT, ovvero una condizione di competizione. Vedi stackoverflow.com/a/3791506/1836776 per una buona risposta sul perché anche il wrapping in una transazione non risolve questo problema.