Можно ли заблокировать запись и разрешить другим пользователям читать ее?

Это может быть очень глупый вопрос, но, как говорится, "единственный тупой вопрос - это тот, который вы не задаете"...

У меня есть база данных SQL Server 2008, и я хочу заблокировать запись для редактирования. Однако другой пользователь может захотеть увидеть информацию в этой записи одновременно. Итак, я хочу, чтобы первый человек смог заблокировать запись в том смысле, что он единственный, кто может ее редактировать. Тем не менее, я все еще хочу, чтобы другие пользователи видели данные, если они хотят.

Все это делается из внешнего интерфейса C#, так как он будет в нашей внутренней сети.

3 ответа

Не делайте свою собственную блокировку - пусть SQL Server обрабатывает ее самостоятельно.

Пока только ты SELECTвы положите в строку то, что называется общей блокировкой - другие пользователи, которые также хотят прочитать эту строку, могут это сделать.

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

Чтобы расширить ответ Marc_s, читатель также может использовать

set transaction isolation Level read uncommitted 

оператор, как описано здесь, для принудительного чтения, чтобы игнорировать любые блокировки (с заметным исключением любых Sch-M, модификация схемы, блокировки), которые могут существовать. Это также полезный параметр для отчетов, которые не требуют абсолютной воспроизводимости, поскольку он может значительно повысить производительность этих отчетов.

В дополнение к существующим ответам: Вы можете включить изоляцию снимка. Это дает вашей транзакции моментальный снимок базы данных для чтения. Эта транзакция не будет блокировать данные вообще. Это не будет блокировать.

Другие вопросы по тегам