Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Phương pháp tốt nhất để chèn bản ghi nếu bản ghi đó chưa tồn tại là gì?

Khi bạn cần đảm bảo tính duy nhất của các bản ghi với điều kiện không thể được thể hiện bằng ràng buộc KHÓA CHÍNH hoặc DUY NHẤT, bạn thực sự cần đảm bảo rằng việc kiểm tra sự tồn tại và chèn đang được thực hiện trong một giao dịch. Bạn có thể đạt được điều này bằng cách:

  1. Sử dụng một câu lệnh SQL để thực hiện kiểm tra và chèn (tùy chọn thứ ba của bạn)
  2. Sử dụng giao dịch với mức cách ly thích hợp

Tuy nhiên, có một cách thứ tư sẽ giúp bạn cấu trúc mã của mình tốt hơn và cũng làm cho nó hoạt động trong các tình huống mà bạn cần xử lý hàng loạt bản ghi cùng một lúc. Bạn có thể tạo một biến TABLE hoặc một bảng tạm thời, chèn tất cả các bản ghi cần được chèn vào đó và sau đó viết các câu lệnh INSERT, UPDATE và DELETE dựa trên biến này.

Dưới đây là mã (giả) thể hiện cách tiếp cận này:

-- 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)

Trong nhiều tình huống, tôi sử dụng phương pháp này vì nó làm cho mã TSQL dễ đọc hơn, có thể cấu trúc lại và áp dụng các bài kiểm tra đơn vị.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm có giá trị bảng trong SQL Server là gì?

  2. Trình kích hoạt Sql Server chèn các giá trị từ hàng mới vào một bảng khác

  3. Đây là ba lý do tại sao bạn có thể thấy hoạt động cao điểm trong phiên bản SQL của bạn

  4. So sánh kỹ thuật:Microsoft Access 2016 và SQL Server 2016

  5. Cách tốt nhất để triển khai Hiệp hội đa hình trong SQL Server là gì?