Hai detto:
Hai semplicemente bisogno di un blocco di lettura condiviso per la durata del TXN. Ciò significa che nessun altro processo può ottenere un blocco di "scrittura", insieme a un TABLOCK. E non hai nemmeno bisogno di COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Perché pensi di volere un UPDATE LOCK?
Modifica, dopo il commento:
- "blocco esclusivo" significa "un solo processo che utilizza i dati".
- "SERIALIZABLE" significa fondamentalmente mantenere le serrature (condivise, esclusive, qualunque cosa) per molto più tempo.
Non puoi specificare "blocco esclusivo" e consentire la lettura ad altri processi. I concetti si escludono a vicenda. Vuoi impedire le scritture sull'intera tabella, che persistono il blocco condiviso/di lettura andrà bene. È qui che entra in gioco SERIALIZABLE.
Quindi:un blocco condiviso non consente le scritture e può essere fatto persistere rendendolo SERIALIZZABILE