В SQL Server каждая транзакция имеет неявный или явный уровень транзакции. Явный, если вызывается с BEGIN/COMMIT/ROLLBACK TRANSACTION
, неявный, если ничего подобного не выдается.
Запустите ваш снимок до начала запроса на обновление. В противном случае у SQL Server не будет возможности подготовить измененные строки в базу данных tempdb, а в запросе на обновление блокировка по-прежнему будет открыта.
Другой способ без создания изоляции моментального снимка состоит в использовании SELECT <columns> FROM <table> WITH (NOLOCK)
, который позволяет SQL Server получать строки независимо от того, что (READ_UNCOMMITED). Так как это подсказка запроса, она меняет уровень изоляции даже с вашими настройками. Может сработать, если вас не беспокоит, какое состояние строки запрашивается, однако при оценке полученных данных следует соблюдать осторожность.