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

Kiểm tra ràng buộc:TRY / CATCH so với Tồn tại ()

Tôi đã xem bài báo đó nhưng lưu ý rằng đối với tỷ lệ thất bại thấp, tôi thích mô hình "JFDI" hơn. Tôi đã sử dụng điều này trên các hệ thống âm lượng lớn trước đây (40k hàng / giây).

Trong mã của Aaron, bạn vẫn có thể nhận được một bản sao khi thử nghiệm đầu tiên trong điều kiện tải cao và nhiều lần ghi. (được giải thích tại đây trên dba.se ) Điều này rất quan trọng:các bản sao của bạn vẫn xảy ra, chỉ là ít thường xuyên hơn. Bạn vẫn cần xử lý ngoại lệ và biết khi nào nên bỏ qua lỗi trùng lặp (2627)

Chỉnh sửa:được Remus giải thích ngắn gọn trong một câu trả lời khác

Tuy nhiên, tôi sẽ có một TRY / CATCH riêng để kiểm tra chỉ đối với lỗi trùng lặp

BEGIN TRY

-- stuff

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

--more stuff

BEGIN CATCH
    RAISERROR etc
END CATCH


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL để nhận các bản ghi DISTINCT theo thứ tự và sau đó áp dụng số hàng

  2. Thoát các chuỗi có chứa các dấu ngoặc kép trong PowerShell đã sẵn sàng cho truy vấn SQL

  3. Kiểm tra / Thay đổi mức độ tương thích của cơ sở dữ liệu trong SQL Server (SSMS)

  4. Khám phá các thao tác lập chỉ mục trực tuyến cấp độ phân vùng trong SQL Server 2014 CTP1

  5. Chúng tôi có thể từ chối xóa khỏi các bảng cụ thể không?