Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server Insert, ако не съществува

вместо по-долу код

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 за добър отговор защо дори обвиването в транзакция не решава това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Трикове за непрекъснато подобряване на мониторинга на базата данни

  2. Причини да нямате клъстериран индекс в SQL Server 2005

  3. Как да използвате параметър с LIKE в Sql Server Compact Edition

  4. Как да генерирате скриптове за повторно създаване на ограничения за външни ключове в база данни на SQL Server - SQL Server / TSQL Урок, част 73

  5. Как да изберете вложен JSON в SQL Server с OPENJSON