【发布时间】:2011-06-03 10:41:57
【问题描述】:
我有两个并发进程,我有两个查询,例如:
select top 10 * into #tmp_member
from member
where status = 0
order by member_id
然后
update member
set process_status = 1
from member inner join #tmp_member m
on member.member_id=m.member_id
我希望每个进程选择不同的行,因此如果第一个进程已经选择了一行,则不要在第二个进程的结果列表中使用该行。
我必须玩锁吗? UPDLOCK、ROWLOCK、READPAST 提示可能吗?还是有更直接的解决方案?
感谢您的帮助,
干杯,
b
【问题讨论】:
-
目前您的第二个查询只会更新您的第一个查询插入到临时表中的行。您想更改第二个查询,使其不使用第一个查询结果?
-
不,他需要两条语句:选择条目,然后更新所选条目。但是,有两个进程在执行这两个调用。现在的问题是进程 2 可能选择与进程 1 相同的 10 个条目,因为选择和更新不是原子操作。他不希望进程 2 再次更新相同的条目。
-
没错,感谢您的澄清!
标签: sql sql-server-2008 locking