Ваш оператор обновления (т. Е. Тот, который изменяет данные) будет удерживать блокировки независимо от уровня изоляции и от того, явно ли вы определили транзакцию, которой нет.
То, что вы можете контролировать, - это гранулярность блокировок, используя подсказки запроса . Поэтому, если обновление блокирует всю таблицу, вы можете указать подсказку запроса, чтобы заблокировать только затронутые строки (подсказка ROWLOCK). Это если, конечно, ваш запрос не обновляет всю таблицу.
Таким образом, чтобы ответить на ваш вопрос, первое соединение с запросом блокировок на ресурсе будет удерживать эти блокировки на время транзакции. Вы можете указать, что выборка не удерживает блокировки, используя уровень изоляции «незафиксированное чтение», операторы, которые изменяют вставку / обновление / удаление данных, всегда сохраняют блокировки независимо. Следующее соединение для запроса блокировок на том же ресурсе будет ожидать завершения первого, а затем будет удерживать свои блокировки. Мертвая блокировка - это особый сценарий, когда два соединения удерживают блокировки, и каждое из них ожидает ресурс другого соединения, чтобы избежать вечного ожидания механизма, одно соединение выбрано в качестве жертвы тупика.