BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
To bude stačit.
UPRAVIT
Jak poznamenali ostatní, nemůžete řádek uzamknout, aby nebyl přečten . Jediný způsob, jak to udělat, je následující:
WITH (UPDLOCK, TABLOCK)
A to za předpokladu, že WITH (NOLOCK) není nikdy použito v příkazu SELECT (čemuž je třeba se stejně vyhnout).
Testoval jsem to a bude to fungovat, i když TABLOCK by se měl používat pouze v extrémních případech. Určitě, pokud je vyžadována souběžnost, je to špatné řešení a byla by potřeba nějaká jiná forma zamykání. Jedním ze způsobů je aktualizovat bitový sloupec "Available True/False" a číst pouze řádky, kde Available =True. Jak navrhl @gbn, READPAST mohlo být použit s tímto.