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

Apa praktik terbaik untuk memasukkan catatan jika belum ada?

Ketika Anda perlu menjamin keunikan record pada suatu kondisi yang tidak dapat dinyatakan dengan batasan UNIQUE atau PRIMARY KEY, Anda memang perlu memastikan bahwa pemeriksaan keberadaan dan penyisipan dilakukan dalam satu transaksi. Anda dapat mencapainya dengan:

  1. Menggunakan satu pernyataan SQL untuk melakukan pemeriksaan dan penyisipan (opsi ketiga Anda)
  2. Menggunakan transaksi dengan tingkat isolasi yang sesuai

Namun, ada cara keempat yang akan membantu Anda menyusun kode dengan lebih baik dan juga membuatnya berfungsi dalam situasi di mana Anda perlu memproses sekumpulan catatan sekaligus. Anda dapat membuat variabel TABLE atau tabel sementara, menyisipkan semua record yang perlu disisipkan di sana dan kemudian menulis pernyataan INSERT, UPDATE dan DELETE berdasarkan variabel ini.

Di bawah ini adalah kode (semu) yang menunjukkan pendekatan ini:

-- Logic to create the data to be inserted if necessary

DECLARE @toInsert TABLE (idCol INT PRIMARY KEY,dataCol VARCHAR(MAX))
INSERT INTO @toInsert (idCol,dataCol) VALUES (1,'row 1'),(2,'row 2'),(3,'row 3')

-- Logic to insert the data

INSERT INTO realTable (idCol,dataCol)
SELECT TI.*
FROM @toInsert TI
WHERE NOT EXISTS (SELECT 1 FROM realTable RT WHERE RT.dataCol=TI.dataCol)

Dalam banyak situasi saya menggunakan pendekatan ini karena membuat kode TSQL lebih mudah dibaca, memungkinkan untuk melakukan refactor dan menerapkan unit test.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Pilih kolom dengan nilai NULL saja

  2. Masukkan Karakter ke Tengah String di SQL Server (T-SQL)

  3. DATEDIFF() Contoh di SQL Server

  4. Cara mempercepat penyisipan massal ke MS SQL Server menggunakan pyodbc

  5. Cara Menemukan Pekerjaan Agen SQL Server di Azure Data Studio