是否有一个SQL Server相当于PostgreSQL“select * for update”而没有打开游标

时间:2013-02-26 13:17:18

标签: sql-server locking

Postgresql允许我在使用以下语法选择行时锁定行:

select id, amount from table where id = 1234 for update

这允许我更新行,同时确保同时读取谁也想要更新同一行的更新和更正结果。

基本上我可以做这样的事情(伪代码):

begin transaction
select id, amount from table where id = 1234 for update
if(amount == new_amount) then
  delete from table where id = 1234;
else
  update table set amount = amount - new_amount where id = 1234
end
commit transaction

仅在DECLARE CURSOR中,Sql Server中允许使用相同的语法。有没有办法读取行,同时锁定它以进行更新只需简单的选择?

1 个答案:

答案 0 :(得分:3)

select * from T WITH (UPDLOCK)

WITH提示非常灵活且设计精良。我猜它们比for update更加精确和通用。