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

Chỉ chèn một hàng nếu nó chưa có ở đó

Còn mẫu "JFDI" thì sao?

BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH

Nghiêm túc mà nói, đây là cách nhanh nhất và đồng thời nhất mà không cần khóa, đặc biệt là ở khối lượng lớn. Điều gì sẽ xảy ra nếu UPDLOCK được tăng lên và toàn bộ bảng bị khóa?

Đọc bài 4:

Bài học 4: Khi phát triển chương trình nâng cấp trước khi điều chỉnh các chỉ mục, trước tiên tôi tin tưởng rằng If Exists(Select…) dòng sẽ kích hoạt cho bất kỳ mục nào và sẽ cấm các mục trùng lặp. Không. Trong một thời gian ngắn, có hàng nghìn bản sao vì cùng một mục sẽ đạt mức upert ở cùng một phần nghìn giây và cả hai giao dịch sẽ không tồn tại và thực hiện chèn. Sau nhiều thử nghiệm, giải pháp là sử dụng chỉ mục duy nhất, bắt lỗi và thử lại cho phép giao dịch xem hàng và thực hiện cập nhật thay vì chèn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY để kết hợp / nối một cột

  2. Tạo một hàm có giá trị bảng trong SQL Server

  3. Cài đặt Trình điều khiển JDBC của Microsoft SQL Server trong các công cụ Tích hợp dữ liệu Pentaho và Máy chủ BA

  4. Cách thêm nhóm người dùng Active Directory làm đăng nhập trong SQL Server

  5. Chuyển đổi hiệu quả ngày giữa UTC và giờ địa phương (tức là. PST) trong SQL 2005