SELECt在读取的行上放置共享锁,然后可以在
READ COMMITED隔离模式下解除共享锁。
UPDATE将更新锁升级为排他锁。直到交易结束它们才被解除。
您应将锁放置后立即保留。
您可以通过设置事务隔离级别来做到这一点,该级别
REPEATABLE READ将保留共享锁直到事务结束,并防止
UPDATE部分锁定这些行。
或者,您可以按以下方式重写查询:
WITH q AS ( SELECT TOP 10000 * FROM mytable WITH (ROWLOCK, READPAST) WHERe batch_id IS NULL ORDER BY date )UPDATE qSET batch_id = @myid
,这只会跳过锁定的行。



