thay vì bên dưới Mã
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
thay thế bằng
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
Đã cập nhật: (cảm ơn @Marc Durdin đã chỉ)
Lưu ý rằng trong điều kiện tải cao, điều này đôi khi vẫn không thành công, vì kết nối thứ hai có thể vượt qua kiểm tra IF NOT EXISTS trước khi kết nối đầu tiên thực hiện INSERT, tức là điều kiện chạy đua. Xem stackoverflow.com/a/3791506/1836776 để có câu trả lời tốt về lý do tại sao ngay cả khi gói trong một giao dịch cũng không giải quyết được điều này.