Здесь я даю два набора sql для блокировки строк во время оператора select.
BEGIN TRAN
SELECT *
FROM authors AU
WITH (HOLDLOCK, ROWLOCK)
WHERE AU.au_id = '274-80-9391'
/* Do all your stuff here while the row is locked */
COMMIT TRAN
Подсказка HOLDLOCK
вежливо просит SQL Server удерживать блокировку до тех пор, пока вы не совершите транзакцию.Подсказка ROWLOCK
вежливо просит SQL Server заблокировать только эту строку, а не блокировать страницу или таблицу.
Имейте в виду, что если затронуто множество строк, либо SQL Server проявит инициативу и перейдет на страницублокировок, или у вас будет целая армия блокировок строк, заполняющих память вашего сервера и замедляющих обработку.
еще одна
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
еще одна хорошая ссылка, которой я хочу поделиться с вами при блокировке,https://www.mssqltips.com/sqlservertip/1257/processing-data-queues-in-sql-server-with-readpast-and-updlock/
спасибо