Предполагая, что это сервер MS SQL, вы, вероятно, хотите UPDLOCK
, возможно, в сочетании с ROWLOCK
( Таблица подсказок ). У меня проблемы с поиском достойной статьи, которая описывает теорию, но вот быстрый пример:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
Этот оператор будет помещать блокировку обновления в строку на время транзакции (поэтому важно знать, когда транзакция завершится). Поскольку блокировки обновления несовместимы с эксклюзивными блокировками (требуется для обновления записей), это не позволит никому обновить эту запись до завершения транзакции.
Обратите внимание, что другие процессы, пытающиеся изменить эту запись, будут заблокированы до завершения транзакции, однако продолжат выполнение любой операции записи, запрошенной после завершения транзакции (если они не были заблокированы по тайм-ауту или уничтожены как заблокированный процесс). Если вы хотите предотвратить это, тогда ваши другие процессы должны использовать дополнительные подсказки, чтобы либо прервать обнаружение несовместимой блокировки, либо пропустить запись, если она изменилась.
<ч />
Кроме того, Вы не должны использовать этот метод для блокировки записей во время ожидания ввода пользователя . Если это ваше намерение, то вместо этого вам следует добавить в таблицу какой-нибудь столбец «изменяемых».
Механизмы блокировки сервера SQL действительно подходят для использования только для сохранения целостности данных / предотвращения взаимных блокировок - транзакции обычно должны быть максимально короткими и, конечно, не должны поддерживаться во время ожидания ввода данных пользователем.