au lieu de ci-dessous Code
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
remplacer par
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
Mise à jour : (merci à @Marc Durdin pour le pointage)
Notez que sous une charge élevée, cela échouera encore parfois, car une deuxième connexion peut réussir le test IF NOT EXISTS avant que la première connexion n'exécute l'INSERT, c'est-à-dire une condition de concurrence. Voir stackoverflow.com/a/3791506/1836776 pour une bonne réponse sur pourquoi même l'encapsulation dans une transaction ne résout pas ce problème.