Я попытался воспроизвести ситуацию вопроса [1].
На таблицу, взятую и заполненную данными из "Изоляции (системы баз данных)" вики [2],
в SQL Server 2008 R2 SSMS я выполнил:
1) первая в первой вкладке (окне) SSMS
-- transaction isolation level in first window does not influence results (?)
-- initially I thought that second transaction in 2) runs at the level set in first window
begin transaction
INSERT INTO users VALUES ( 3, 'Bob', 27 )
waitfor delay '00:00:22'
rollback
2) сразу после, во втором окне
-- this is what I commented/uncommented
-- set transaction isolation level SERIALIZABLE
-- set transaction isolation level READ REPEATABLE
-- set transaction isolation level READ COMMITTED
-- set transaction isolation level READ UNCOMMITTED
SELECT * FROM users --WITH(NOLOCK)
Обновление:
Извините, результаты были исправлены.
Мои результаты, в зависимости от уровня изоляции, установленного в 2), возвращаются SELECT:
Эти результаты противоречат ситуации, описанной в вопросе (и объясненной в ответах?) [1]
(например, что SELECT с NOCHECK ожидает завершения 1)) и т. д.
Как объяснить мои результаты и [1]?
Update2:
Этот вопрос действительно подвопрос моих вопросов [3] (или результат того, что они не получили ответа).
Цитируется:
[1]
Объяснить поведение блокировки в SQL Server
Объяснить поведение блокировки в SQL Server
[2]
"Изоляция (системы баз данных)"
Плз добавить трейлинг) к ссылке. Я не могу сохранить это здесь в ссылке!
http://en.wikipedia.org/wiki/Isolation_(database_systems)
[3]
Является ли NOLOCK значением по умолчанию для операторов SELECT в SQL Server 2005?
Является ли NOLOCK значением по умолчанию для операторов SELECT в SQL Server 2005?