नीचे दिए गए कोड के बजाय
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 का धन्यवाद)
ध्यान दें कि उच्च भार के तहत, यह अभी भी कभी-कभी विफल हो जाएगा, क्योंकि पहला कनेक्शन INSERT, यानी एक दौड़ की स्थिति को निष्पादित करने से पहले एक दूसरा कनेक्शन IF NOT EXISTS परीक्षण पास कर सकता है। एक अच्छे उत्तर के लिए stackoverflow.com/a/3791506/1836776 देखें कि लेनदेन में लपेटने से भी इसका समाधान क्यों नहीं होता है।