2010-06-23 3 views
0

У меня возникла следующая проблема: Я вставляю строку в таблицу (скажем, «temp») внутри транзакции (транзакция ADO.NET по умолчанию). Пока транзакция не будет выполнена, команда «select * from temp», запущенная из другого сеанса (студия управления SQL Server 2008), заблокирована и не может быть завершена.Операции SQL Server: вставка вызывает блокировки?

Это кажется мне странным. Должна ли команда чтения возвращать все предыдущие строки таблицы (все, кроме недавно вставленной строки) и не блокироваться?

ответ

2

Поведение по умолчанию в SQL Server - это блокировка, и они не будут выпущены до тех пор, пока транзакция не будет выполнена.

Существует 3 основных пути: READPAST hint (который пропустит заблокированные строки), уровень изоляции READ UNCOMMITTED (или подсказку NOLOCK) (который вернет все строки, включая вновь вставленные (ые) , или SNAPSHOT isolation level - но для моментального снимка это должно быть разрешено на уровне сервера

+0

или 4) READ_COMMITTED_SNAPSHOT, который является поведением, которое ожидал ОП –

Смежные вопросы