en lugar del siguiente Código
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
reemplazar 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
Actualizado: (gracias a @Marc Durdin por señalar)
Tenga en cuenta que bajo una carga alta, esto todavía fallará a veces, porque una segunda conexión puede pasar la prueba IF NOT EXISTS antes de que la primera conexión ejecute INSERT, es decir, una condición de carrera. Consulte stackoverflow.com/a/3791506/1836776 para obtener una buena respuesta sobre por qué incluso envolver una transacción no resuelve esto.