Блокировка строки в SQL 2005-2008

есть ли способ заблокировать строку в базе данных SQL 2005-2008 без запуска транзакции, поэтому другие процессы не могут обновить строку, пока она не будет разблокирована?

3 ответов


можно использовать RowLock или другие подсказки но вы должны быть осторожно..

подсказка HOLDLOCK будет указывать SQL Server удерживать блокировку до фиксации транзакции. Подсказка ROWLOCK заблокирует только эту запись и не выдаст блокировку страницы или таблицы.

блокировка также будет освобождена, если вы закроете соединение или время ожидания. Я был бы очень осторожен, делая это, так как это остановит любые операторы SELECT, которые попали в эту строку мертвыми в их треков. SQL Server имеет множество подсказок блокировки, которые можно использовать. Вы можете увидеть их в книгах онлайн при поиске на HOLDLOCK или ROWLOCK.


все выполняется на сервере происходит в транзакции, явной или неявной.

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

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


вам нужно заблокировать row или блокировки приложений Sql Server делать то, что вам нужно?

блокировка приложения-это просто блокировка с именем, которое вы можете "заблокировать", "разблокировать" и проверить, заблокировано ли оно. см. выше ссылку для деталей. (Они разблокируются, если ваше соединение закрывается и т. д., Поэтому, как правило, очищают себя)