Du sa:
Du behöver helt enkelt ett delat läslås under TXN:s varaktighet. Detta betyder att ingen annan process kan få ett "skriv"-lås, i samband med ett TABELBLOCK. Och du behöver inte heller COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Varför tror du att du vill ha ett UPPDATERINGSLÅS?
Redigera, efter kommentar:
- "exklusivt lås" betyder "endast en process som använder data".
- "SERIALISERBAR" betyder i grunden att man håller låsen (delade, exklusiva, vad som helst) mycket längre.
Du kan inte ange "exklusivt lås" och tillåta andra processer att läsa. Begreppen utesluter varandra. Du vill förhindra skrivningar till hela tabellen, vilket bestod delat/läs lås kommer att göra. Det är här SERIALIZABLE kommer in.
Från "Låslägen"
Så:ett delat lås tillåter inte skrivningar och kan fås att bestå genom att göra det SERIALISERBART