如何在SQL Server中获取写锁?

时间:2014-08-17 05:01:38

标签: sql-server

我需要运行一个选择十条记录的查询。然后,根据他们的值和一些外部信息,更新所述记录。

不幸的是,当我以多线程方式执行此操作时,我遇到了死锁。线程A和B都同时运行它们的选择,获取10条记录上的读锁定。因此,当其中一个尝试进行更新时,另一个事务将被中止。

所以我需要说的是"选择并写入锁定这10条记录"。

(是的,我知道应该避免连续交易,但对我来说这是一个特例。)

1 个答案:

答案 0 :(得分:1)

尝试应用UPDLOCK

BEGIN TRAN

SELECT * FROM table1
WITH (UPDLOCK, ROWLOCK)
WHERE col1 = 'value1'

UPDATE table1 
set col1 = 'value2'
where col1 = 'value1'

COMMIT TRAN