日期:2014-05-17  浏览次数:20671 次

多客户端同时select top 1怎样取到不同的记录?
现在的做法是在表中加一个working的boolean值,

rs.open "select top 1 * from table where working = 0", dbc, 1, 3
rs("working") = 1
rs.update

但是还是会出现乐观并发检查失败,取到了同一条记录,rs.update失败(记录已被另一客户端修改)。

如果改成
rs.open "select top 1 * from table where working = 0", dbc, 1, 2
即悲观锁,同样的代码也会出现取到同一条记录的问题,出错是deadlock死锁。

select top 1 * from table where working = 0 for update
这样加for update也不行。

请问应该有没有其它的办法呢?谢谢。

------解决方案--------------------
直接用Update语句啊
dim sSQL as string
sSQL="update table set working=1 where working=0 and 你的其他条件(能找出这一笔的)"
dbc.exec sql