我需要运行一个选择十条记录的查询。然后,根据他们的值和一些外部信息,更新所述记录。
不幸的是,当我以多线程方式执行此操作时,我遇到了死锁。线程A和B都同时运行它们的选择,获取10条记录上的读锁定。因此,当其中一个尝试进行更新时,另一个事务将被中止。
所以我需要说的是"选择并写入锁定这10条记录"。
(是的,我知道应该避免连续交易,但对我来说这是一个特例。)
答案 0 :(得分:1)
尝试应用UPDLOCK
BEGIN TRAN
SELECT * FROM table1
WITH (UPDLOCK, ROWLOCK)
WHERE col1 = 'value1'
UPDATE table1
set col1 = 'value2'
where col1 = 'value1'
COMMIT TRAN