BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
Điều đó sẽ thực hiện thủ thuật.
CHỈNH SỬA
Như những người khác đã lưu ý, bạn không thể khóa một hàng để không được đọc . Cách duy nhất tôi biết để làm điều này là như sau:
WITH (UPDLOCK, TABLOCK)
Và điều này giả sử rằng một WITH (NOLOCK) không bao giờ được sử dụng trong câu lệnh SELECT (dù sao thì điều này cũng nên tránh).
Tôi đã thử nghiệm điều này và nó sẽ hoạt động, mặc dù TABLOCK chỉ nên được sử dụng trong những trường hợp cực đoan. Chắc chắn nếu yêu cầu đồng thời, đó là một giải pháp tồi và một số hình thức khóa khác sẽ là cần thiết. Một cách là cập nhật một cột bit "Có sẵn Đúng / Sai" và chỉ đọc các hàng có Sẵn =Đúng. Như @gbn đã đề xuất, READPAST có thể được sử dụng với cái này.