BEGIN TRAN
SELECT 1
FROM Table
WITH (XLOCK, ROWLOCK)
COMMIT TRAN
To załatwi sprawę.
EDYTUJ
Jak zauważyli inni, nie można zablokować wiersza, aby nie był czytany . Jedyny znany mi sposób, aby to zrobić, jest następujący:
WITH (UPDLOCK, TABLOCK)
A to przy założeniu, że WITH (NOLOCK) nigdy nie jest używane w instrukcji SELECT (czego i tak należy unikać).
Testowałem to i zadziała, chociaż TABLOCK powinien być używany tylko w skrajnych przypadkach. Oczywiście, jeśli wymagana jest współbieżność, jest to złe rozwiązanie i potrzebna byłaby jakaś inna forma blokowania. Jednym ze sposobów jest aktualizacja kolumny bitowej „Dostępna prawda/fałsz” i odczytywanie tylko wierszy, w których Dostępne =Prawda. Zgodnie z sugestią @gbn, READPAST może być używany z tym.