更新的奇怪问题,SQL Server 2000(在线等待)
表A存放种子,就一个字段id, int类型,也只有一笔数据20
假定现在程序做一个100次的循环,调用一个存储过程
该过程的主要功能如下,每次都要先更新表A set id=id+1,然后再取ID的数据
代码如下
declare @tmpid bigint
declare @tmpstr varchar(20)
set @tmpstr=''
set @tmpid=0
update a set id=id+1
select @tmid=id from a readcommitted
set @tmpstr= ltrim(rtrim(convert(varchar,@tmpid)))
print @tmpstr
现在发现这样的问题
tmpstr的数据很奇怪,按道理应该是21,22,23,24这样一直下来
可结果有时候是这样,21,22,22,24,23就没有了,直接到24了。
如果调用该过程的循环次数少的话,这种情况很少,如果循环次数多的话,1000笔资料就有10笔出现这样的情况。
我现在不知道为什么会出现这样的情况,估计是数据脏读。因为的确有很多人同时对这个表做处理,有没有好的解决办法,或者保险点的事务处理方法。。现在还没能回家,加班啊,饭都没吃。唉,救急。。。