Nếu các lệnh gọi đến SP1 theo sau bởi SP2 là nguyên tử, chúng nên được kết hợp trong T-SQL. Hoặc mất giao dịch c #. Bạn đang kéo dài giao dịch một cách không cần thiết với các vòng tua.
Ngoài ra, tại sao có UPDLOCK trên SP1UPDLOCK mà không phải cho SP1? Tôi không thể hiểu tại sao. Nếu vấn đề là các gợi ý về khóa, đừng sử dụng chúng. Nếu một cái gì đó có thể tuần tự hóa (tại sao?) Thì một lần nữa, hãy đặt nó thành một lệnh gọi nguyên tử duy nhất
Lưu ý rằng mặc định vẫn là ĐỌC CAM KẾT
Cuối cùng, bạn có nghĩa là "semaphore" không khóa? Sử dụng sp_getapplock sẽ kiểm soát dòng chảy qua mã mà không sử dụng khóa trên dữ liệu