namísto níže uvedeného kódu
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
nahradit
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
Aktualizováno: (děkujeme @Marc Durdin za upozornění)
Všimněte si, že při vysoké zátěži to stále někdy selže, protože druhé připojení může projít testem IF NOT EXISTS dříve, než první připojení provede INSERT, tj. spor. Na stránce stackoverflow.com/a/3791506/1836776 najdete dobrou odpověď na otázku, proč to nevyřeší ani zabalení transakce.