Tú dijiste:
Simplemente necesita un bloqueo de lectura compartido durante la duración de la TXN. Esto significa que ningún otro proceso puede obtener un bloqueo de "escritura", junto con un TABLOCK. Y tampoco necesitas COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
¿Por qué crees que quieres un BLOQUEO DE ACTUALIZACIÓN?
Editar, después del comentario:
- "bloqueo exclusivo" significa "solo un proceso que usa los datos".
- "SERIALIZABLE" básicamente significa mantener los bloqueos (compartidos, exclusivos, lo que sea) durante mucho más tiempo.
No puede especificar "bloqueo exclusivo" y permitir que otros procesos lean. Los conceptos son mutuamente excluyentes. Desea evitar escrituras en toda la tabla, que persistió el bloqueo compartido/de lectura servirá. Aquí es donde entra en juego SERIALIZABLE.
Entonces:un bloqueo compartido no permite escrituras y se puede hacer que persista haciéndolo SERIALIZABLE