statt unten 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
durch
ersetzenBEGIN
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
Aktualisiert : (Danke an @Marc Durdin für den Hinweis)
Beachten Sie, dass dies unter hoher Last manchmal immer noch fehlschlägt, da eine zweite Verbindung den IF NOT EXISTS-Test bestehen kann, bevor die erste Verbindung den INSERT ausführt, dh eine Race-Bedingung. Unter stackoverflow.com/a/3791506/1836776 finden Sie eine gute Antwort darauf, warum selbst das Einschließen einer Transaktion das Problem nicht löst.