Может ли кто-нибудь сказать мне, почему следующий оператор внутри данной хранимой процедуры возвращает повторяющиеся результаты даже при блокировках строк, используемых первым оператором SELECT
?
BEGIN TRANSACTION
DECLARE @Temp TABLE ( ID INT )
INSERT INTO @Temp SELECT ID FROM SomeTable WITH (ROWLOCK, UPDLOCK, READPAST) WHERE SomeValue <= 10
INSERT INTO @Temp SELECT ID FROM SomeTable WITH (ROWLOCK, UPDLOCK, READPAST) WHERE SomeValue >= 5
SELECT * FROM @Temp
COMMIT TRANSACTION
Любые значения в SomeTable
, для которых SomeValue
находится в диапазоне от 5 до 10, будут возвращены дважды, даже если они были заблокированы в первом SELECT
. Я думал, что для всей транзакции были установлены блокировки, и поэтому я не ожидал, что запрос выдаст повторные результаты. Почему это происходит?