Блокировка строки SQL Server - PullRequest
3 голосов
/ 07 января 2011

Как блокировать строки в SQL Server 2005. Я выполняю sql для блокировки строк, и это

SELECT *
FROM authors
WITH (HOLDLOCK, ROWLOCK)
WHERE au_id = '274-80-9391'

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

Ответы [ 2 ]

2 голосов
/ 07 января 2011

Вы не можете скрыть строку, чтобы она не была видна другим запросам SQL. Если вы открываете транзакцию, блокируете строку и удерживаете открытой транзакцию, вы можете заставить другие запросы SQL блокировать ожидание завершения транзакции и снятия блокировки. Однако если запросы выполняются с другим уровнем изоляции транзакции (например, Read Uncommitted ), тогда они обойдут блокировку и все равно увидят значения этой строки.

1 голос
/ 14 декабря 2011

Если вы хотите пропустить заблокированные строки, вы можете использовать подсказку READPAST в SQL Server. Это нужно указать в запросе, который читает заблокированные строки, а не в запросе, который их блокирует. Из книг онлайн:

Указывает, что компонент Database Engine не читает строки, заблокированные другие транзакции. Когда указано READPAST, блокировки на уровне строк пропускаются.

Оператор SELECT с подсказкой READPAST вернет все неблокированные строки и пропустит заблокированные строки.

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