вместо по-долу код
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
заменете с
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
Актуализирано: (благодаря на @Marc Durdin за посочването)
Имайте предвид, че при голямо натоварване това понякога ще се провали, тъй като втора връзка може да премине теста IF NOT EXISTS, преди първата връзка да изпълни INSERT, т.е. условие за състезание. Вижте stackoverflow.com/a/3791506/1836776 за добър отговор защо дори обвиването в транзакция не решава това.