блокировка получения при использовании UNION ALL - PullRequest
1 голос
/ 04 июля 2011

извинения - это очень простой вопрос, но я нигде не могу найти ответ ..

При выполнении запроса с использованием запроса UNION ALL (как показано ниже) SQL гарантирует, что блокировки были размещены в обеих таблицах до получения данных, или же в этом случае блокировки размещаются независимо в каждой таблице, как показано чтобы быть в этом случае, глядя на план выполнения.

select i from T1 with (updlock, holdlock) 
UNION ALL 
select i from T2 with (updlock, holdlock)

1 Ответ

1 голос
/ 04 июля 2011

Обновление будет взято в каждой строке, из каждой таблицы, как это читается.В зависимости от размера таблиц, вы можете увидеть эскалацию.Если вы хотите принудительно заблокировать обе таблицы до того, как какие-либо данные будут прочитаны, укажите подсказку таблока.

Запустите Profiler, создайте пустое определение трассировки, отфильтруйте в своей тестовой базе данных и добавьте только Lock: Acquired, Lock: Выпущенные события, и вы можете увидеть последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...