BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
Das reicht aus.
BEARBEITEN
Wie von anderen angemerkt, können Sie eine Zeile nicht sperren, damit sie nicht gelesen wird . Die einzige Möglichkeit, die ich dafür kenne, ist die folgende:
WITH (UPDLOCK, TABLOCK)
Und dies setzt voraus, dass ein WITH (NOLOCK) niemals in einer SELECT-Anweisung verwendet wird (was sowieso vermieden werden sollte).
Ich habe dies getestet und es wird funktionieren, obwohl TABLOCK nur in extremen Fällen verwendet werden sollte. Wenn Parallelität erforderlich ist, ist dies sicherlich eine schlechte Lösung, und es wäre eine andere Form der Sperrung erforderlich. Eine Möglichkeit besteht darin, eine Bit-Spalte "Available True/False" zu aktualisieren und nur Zeilen zu lesen, bei denen "Available" ="True" ist. Wie @gbn vorgeschlagen hat, könnte READPAST damit verwendet werden.