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.