BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
Cela fera l'affaire.
MODIFIER
Comme noté par d'autres, vous ne pouvez pas verrouiller une ligne pour qu'elle ne soit pas lue . La seule façon que je connaisse de le faire est la suivante :
WITH (UPDLOCK, TABLOCK)
Et cela suppose qu'un WITH (NOLOCK) n'est jamais utilisé dans une instruction SELECT (ce qui devrait être évité de toute façon).
J'ai testé cela et cela fonctionnera, bien que TABLOCK ne devrait être utilisé que dans des cas extrêmes. Certes, si la concurrence est requise, c'est une mauvaise solution et une autre forme de verrouillage serait nécessaire. Une façon consiste à mettre à jour une colonne de bits "Available True/False" et à ne lire que les lignes où Available =True. Comme @gbn l'a suggéré, READPAST pourrait être utilisé avec ceci.