i stedet for under kode
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
erstatte med
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
Opdateret: (tak til @Marc Durdin for at pege)
Bemærk, at under høj belastning vil dette stadig nogle gange mislykkes, fordi en anden forbindelse kan bestå testen HVIS IKKE FINNES, før den første forbindelse udfører INSERT, dvs. en race-tilstand. Se stackoverflow.com/a/3791506/1836776 for et godt svar på, hvorfor selv indpakning i en transaktion ikke løser dette.