Строка блокировки в SQL 2005-2008 - PullRequest
       18

Строка блокировки в SQL 2005-2008

7 голосов
/ 21 сентября 2008

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

Ответы [ 3 ]

3 голосов
/ 21 сентября 2008

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

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

Блокировка также будет снята, если вы закроете соединение или истечет время ожидания. Я был бы ОЧЕНЬ осторожен, делая это, так как это остановит все операторы SELECT, которые попали в этот ряд. SQL Server имеет множество подсказок по блокировке, которые вы можете использовать. Вы можете увидеть их в Books Online при поиске в режиме HOLDLOCK или ROWLOCK.

1 голос
/ 21 сентября 2008

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

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

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

0 голосов
/ 22 сентября 2009

Вам нужно заблокировать строку или Sql Server Application Locks должен блокировать делать то, что вам нужно?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...