Bạn đã nói:
Bạn chỉ cần một khóa đọc được chia sẻ trong suốt thời gian của TXN. Điều này có nghĩa là không có quy trình nào khác có thể nhận được khóa "ghi", kết hợp với KHÓA TABLOCK. Và bạn cũng không cần COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Tại sao bạn nghĩ bạn muốn có KHÓA CẬP NHẬT?
Chỉnh sửa, sau khi nhận xét:
- "khóa độc quyền" có nghĩa là "chỉ một quy trình sử dụng dữ liệu".
- "SERIALIZABLE" về cơ bản có nghĩa là giữ khóa (dùng chung, độc quyền, bất cứ thứ gì) lâu hơn nữa.
Bạn không thể chỉ định "khóa độc quyền" và cho phép các quy trình khác đọc. Các khái niệm loại trừ lẫn nhau. Bạn muốn ngăn ghi vào toàn bộ bảng, điều này vẫn tồn tại khóa chia sẻ / đọc sẽ làm. Đây là lúc SERIALIZABLE xuất hiện.
Vì vậy:khóa được chia sẻ không cho phép ghi và có thể được duy trì bằng cách đặt nó ở trạng thái SERIALIZABLE