Powiedziałeś:
Potrzebujesz po prostu wspólnej blokady odczytu na czas trwania TXN. Oznacza to, że żaden inny proces nie może uzyskać blokady „zapisu” w połączeniu z TABLOCK. I nie potrzebujesz też COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Jak myślisz, dlaczego chcesz BLOKADA AKTUALIZACJI?
Edytuj, po komentarzu:
- "ekskluzywna blokada" oznacza "tylko jeden proces wykorzystujący dane".
- "SERIALIZOWALNY" zasadniczo oznacza utrzymywanie blokad (wspólnych, wyłącznych, cokolwiek) przez znacznie dłuższy czas.
Nie możesz określić „wyłącznej blokady” i zezwól innym procesom na odczyt. Koncepcje wzajemnie się wykluczają. Chcesz zapobiec zapisom w całej tabeli, które utrzymywały się blokada współdzielona/odczyt wystarczy. Tu właśnie pojawia się SERIALIZABLE.
Więc:współdzielona blokada uniemożliwia zapisy i można ją zachować, ustawiając ją na SERIALIZOWALNOŚĆ