我想编写一个存储过程,需要执行以下步骤
我想这样做是因为这个SP将从我的java程序每隔5分钟被调用一次,我不想选择我已经从SP返回的行,这就是为什么我需要标记它们进行处理。
答案 0 :(得分:0)
这样的东西?
检索您感兴趣的行。使用holdlock关键字确保没有任何内容可以潜入select和更新之间的额外行。锁定一直持续到交易结束。
存储过程使用共享锁执行检索,然后使用update语句将其升级为exclusive。
当事务提交时,锁被释放。
create proc update_status as
begin transaction
select *
from
t1 holdlock
where
flag = 'Y'
and status != 'PROCESSED'
update t1 set
status = 'PROCESSED'
where
flag = 'Y'
and status != 'PROCESSED'
commit
go