日期:2014-05-18  浏览次数:20416 次

select with(readpast)取得的资料是未committed的问题
有Client 甲、乙
表T,字段C

T表中有一笔资料,该笔字段C='1'

甲: 
begin tran
update T set C='2' where C='1'
commit tran

乙马上: select * from T with(readpast) where C='1'
结果: 1笔

乙等10秒再一次: select * from T with(readpast) where C='1'
结果: 0笔

请问这正常吗?是不是跟SQL Server的隔离等级是READ COMMITTED有关?
A问:用with(readpast)那它取出来的资料应该就是committed的才对,为什么还是会取到旧资料?
我猜:with(readpast)只是能读取已committed的Row,但并不保证资料是更新后的?

请问上面这种情况是有可能发生的吗?原因为何?如何避免呢?是否提升隔离等级就可以?
谢谢~~


------解决方案--------------------
建议参考:
SQL Server脏读方式数据提取之NOLOCK和READPAST