in plaats van onderstaande 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
vervangen door
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
Bijgewerkt: (met dank aan @Marc Durdin voor het wijzen)
Houd er rekening mee dat dit bij hoge belasting soms nog steeds mislukt, omdat een tweede verbinding de IF NOT EXISTS-test kan doorstaan voordat de eerste verbinding de INSERT uitvoert, d.w.z. een race-conditie. Zie stackoverflow.com/a/3791506/1836776 voor een goed antwoord op waarom zelfs het inpakken in een transactie dit niet oplost.