如果data表里有N条数据存储过程:declare @tmpId bigint
BEGIN TRANSACTIONSELECT top 1 @tmpId=Id FROM data rowlock WITH (tablockx) WHERE dstatus=0
update data set dstatus=1 where Id=@tmpId
select * from data where Id=@tmpIdCOMMIT TRANSACTION如果就使用 rowlock with(tablockx) 是否会出现脏读,重复读?(多个进程同时调用这个存储过程)谢谢!(只有23分了,哭~~~~~~)
BEGIN TRANSACTIONSELECT top 1 @tmpId=Id FROM data rowlock WITH (tablockx) WHERE dstatus=0
update data set dstatus=1 where Id=@tmpId
select * from data where Id=@tmpIdCOMMIT TRANSACTION如果就使用 rowlock with(tablockx) 是否会出现脏读,重复读?(多个进程同时调用这个存储过程)谢谢!(只有23分了,哭~~~~~~)
直接UPDATE就是了。判断下@@ROWCOUNT
SELECT top 1 @tmpId=Id FROM data rowlock WITH (tablockx) WHERE dstatus=0
去掉
SELECT top 1 @tmpId=Id FROM data WHERE dstatus=0
11个客户端去读共计1300个数据,有30几条读重复了,有几条甚至读了3次