2015-04-06 3 views
1

У меня простая таблица содержит несколько столбцов: Id, Name, Profit, IsBusy. IsBusy - BIT значение. Мне нужно создать sql-скрипт, который выберет все не занятые записи (IsBusy равен 0), и одно и то же время устанавливает этот флаг равным 1. Таким образом, другие серийные или параллельные запросы не получат эту запись, потому что флаг равен 1. Может существовать какую-то технику выпустить мою задачу? Благодарю.выбрать и установить значение столбца

+0

вы либо «ВЫБРАТЬ», либо «ОБНОВЛЯТЬ» значение, а не оба одновременно. – Lamak

+0

Мне нужно сначала выбрать, а затем обновить. Но мне нужно как-то заблокировать стол, который я думаю. Как разрешить многозадачность в моей задаче? – user2598575

+0

Итак, вам нужно выбрать обновленные записи? – alas

ответ

4

Вашего требование, чтобы остановить пользователь считывания данных при работе с некоторыми конкретными строками, должны быть обработаны с СДЕЛКАМИ и ИЗОЛЯЦИЕЙ LEVEL.

Вы должны изучить самый строгий уровень изоляции i.e SERIALIZABLE.

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

Вы можете изменить уровень изоляции транзакций на SERIALIZABLE с помощью следующей команды.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 

Важное примечание

Имейте в виду, это может очень хорошо привести к обширному блокировки пользователей, и вы можете endup со многими несчастными конечных пользователей, у которых экран держать замораживания :).

Также вы упомянули, что хотите выбрать строки, а затем обновить.

Оператор обновления получает ОБНОВЛЕНИЕ ЗАПИСИ на строки с уровнем изоляции по умолчанию (Read Uncommitted). Если вы обновляете строку, пользователи не смогут получить доступ к строке до тех пор, пока ваше обновление не будет завершено или не будет отменено.

2

Может быть, что-то вроде следующей работы для вас?

update X 
set IsBusy = 1 
output inserted.Id, inserted.Name 
where IsBusy = 0 
+0

В основном вышеуказанный запрос возвращает обновленные записи операции обновления. – alas

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