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


Все, что вы выполняете на сервере, происходит в транзакции, явной или неявной.
Вы не можете просто заблокировать строку без транзакции (сделать строку только для чтения). Вы можете сделать базу данных только для чтения, но не только для одной строки.
Объясните свою цель, и это может быть лучшим решением. Уровни изоляции и подсказки блокировки и управление версиями строк.
Вы можете использовать RowLock или другие подсказки, но вы должны быть осторожный ..
Подсказка HOLDLOCK укажет SQL Server удерживать блокировку до тех пор, пока вы не зафиксируете транзакцию. Подсказка ROWLOCK заблокирует только эту запись и не вызовет блокировку страницы или таблицы.
Блокировка также будет снята, если вы закроете свое соединение или оно истечет. Я был бы ОЧЕНЬ осторожен, делая это, так как это остановит любые операторы SELECT, которые попадут в эту строку на своем пути. В SQL Server есть множество подсказок по блокировке, которые вы можете использовать. Вы можете увидеть их в электронной документации при поиске по HOLDLOCK или ROWLOCK.
Вам нужно заблокировать ряд, или Блокировки приложений Sql Server должен делать то, что вам нужно?
Блокировка приложений - это просто блокировка с именем, которое вы можете «заблокировать», «разблокировать» и проверить, заблокирована ли она. подробности см. по ссылке выше. (Они разблокируются, если ваше соединение закрывается и т. д., Поэтому старайтесь очистить себя)
Я не могу использовать блокировки приложений, потому что другие приложения, обращающиеся к «заблокированной» строке, не знают, что им нужно сначала проверить блокировку приложения.
Я пробовал это, но это не то, что мне нужно. Он действительно держит блокировку, когда я выполняю обновление. Обновление ждет, пока блокировка не будет снята, и после этого обновляет запись (это не то, что я хочу). Во-вторых, я все еще могу выполнить выбор без каких-либо проблем.