SELECT w SQL Server umieści wspólną blokadę w wierszu tabeli - i drugi SELECT wymagałoby również wspólnej blokady, a te są ze sobą kompatybilne.
Więc nie - jeden SELECT nie można zablokować innego SELECT .
Co WITH (NOLOCK) wskazówka zapytania służy do odczytywania danych, które są w trakcie wstawiania (przez inne połączenie) i które nie zostały jeszcze zatwierdzone.
Bez tej wskazówki dotyczącej zapytania SELECT może zostać zablokowany odczyt tabeli przez trwający INSERT (lub UPDATE ) oświadczenie, które umieszcza wyłączność zablokuj wiersze (lub ewentualnie całą tabelę), dopóki transakcja tej operacji nie zostanie zatwierdzona (lub wycofana).
Problem WITH (NOLOCK) wskazówka brzmi:być może czytasz wiersze danych, które nie zostaną w ogóle wstawione na końcu (jeśli INSERT transakcja zostanie wycofana) - więc np. raport może pokazywać dane, które tak naprawdę nigdy nie zostały zapisane w bazie danych.
Jest jeszcze jedna wskazówka dotycząca zapytania, która może być przydatna — WITH (READPAST) . To instruuje SELECT polecenie, aby po prostu pominąć wszystkie wiersze, które próbuje odczytać i które są wyłącznie zablokowane. SELECT nie zablokuje się i nie odczyta żadnych "brudnych" niezatwierdzonych danych - ale może pominąć niektóre wiersze, np. nie pokazuj wszystkich swoich wierszy w tabeli.