Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Sisipkan SQL Server jika tidak ada

alih-alih di bawah Kode

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

ganti dengan

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

Diperbarui : (terima kasih kepada @Marc Durdin karena telah menunjuk)

Perhatikan bahwa di bawah beban tinggi, ini terkadang masih gagal, karena koneksi kedua dapat lulus tes JIKA TIDAK ADA sebelum koneksi pertama mengeksekusi INSERT, yaitu kondisi balapan. Lihat stackoverflow.com/a/3791506/1836776 untuk jawaban yang bagus tentang mengapa bahkan membungkus transaksi tidak menyelesaikan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memanggil API dari prosedur tersimpan SQL Server

  2. Desain basis data untuk pengaturan pengguna

  3. Bagaimana cara saya terhubung ke database MSSQL menggunakan modul DBI Perl di Windows?

  4. Bagaimana cara menggunakan fungsi CONCAT di SQL Server 2008 R2?

  5. Buat Pekerjaan Agen Server SQL di Azure Data Studio