A SELECT в SQL Server ще постави споделено заключване на ред на таблица - и втори SELECT също ще изисква споделено заключване и те са съвместими едно с друго.
Така че не - един SELECT не може да блокира друг SELECT .
Какво е WITH (NOLOCK) Подсказката за заявка се използва, за да можете да четете данни, които са в процес на вмъкване (от друга връзка) и които все още не са заети.
Без този намек за заявка, SELECT може да бъде блокирано четенето на таблица от текущ INSERT (или UPDATE ) изявление, което поставя изключително заключване на редове (или евентуално цяла таблица), докато транзакцията на тази операция не бъде ангажирана (или връщане назад).
Проблем с WITH (NOLOCK) намек е:може да четете редове с данни, които изобщо няма да бъдат вмъкнати, в крайна сметка (ако INSERT транзакцията се връща назад) - така че напр. отчетът може да показва данни, които никога не са били въведени в базата данни.
Има още един намек за заявка, който може да е полезен - WITH (READPAST) . Това инструктира SELECT команда просто да пропусне всички редове, които се опитва да прочете и които са изключително заключени. SELECT няма да блокира и няма да чете никакви "мръсни" неангажирани данни - но може да пропусне някои редове, напр. не показва всичките си редове в таблицата.