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

Для примера PostgreSQL:

UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0; 
7
задан Gulzar Nazim 10 October 2008 в 23:40
поделиться

3 ответа

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

Подсказка HOLDLOCK даст SQL Server команду содержать блокировку, пока Вы не будете фиксировать транзакцию. Подсказка БЛОКИРОВКИ СТРОКИ заблокирует только эту запись и не выпустит страницу или блокировку таблицы.

Блокировка будет также выпущена, если Вы закроете свое соединение, или это испытывает таймаут. Я был бы ОЧЕНЬ тщательным выполнением этого, так как оно остановит любые операторы SELECT, которые поражают эту строку, мертвую в их дорожках. SQL Server имеет многочисленные подсказки блокировки, что можно использовать. Вы видите их в Книгах Онлайн, когда Вы ищете или на HOLDLOCK или на БЛОКИРОВКЕ СТРОКИ.

3
ответ дан 7 December 2019 в 14:39
поделиться

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

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

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

1
ответ дан 7 December 2019 в 14:39
поделиться

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

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

0
ответ дан 7 December 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: