sql >> Database >  >> RDS >> Sqlserver

SQL Server Invoegen indien niet bestaat

in plaats van onderstaande code

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

vervangen door

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

Bijgewerkt: (met dank aan @Marc Durdin voor het wijzen)

Houd er rekening mee dat dit bij hoge belasting soms nog steeds mislukt, omdat een tweede verbinding de IF NOT EXISTS-test kan doorstaan ​​voordat de eerste verbinding de INSERT uitvoert, d.w.z. een race-conditie. Zie stackoverflow.com/a/3791506/1836776 voor een goed antwoord op waarom zelfs het inpakken in een transactie dit niet oplost.



  1. Database Performance Tuning voor MariaDB

  2. SELECTEER DISTINCT Werkt niet Android SQLite

  3. Een AWS Postgres RDS-tabel exporteren naar AWS S3

  4. Wat is SQL Server?