我在微软的网站上读过 http://msdn.microsoft.com/en-us/library/ms173763.aspx
Sql Server 在读取数据时不请求锁,除非正在恢复数据库。
这是否意味着使用 READ_COMMITTED_SNAPSHOT/SNAPSHOT ISOLATION 的 Sql Server 根本不使用共享锁?这怎么可能?
例如,如果有 2 笔交易。第一个事务 T1 想要更新一些行。第二个事务 T2 开始读取同一行(此事务将他复制到某个输出缓冲区、响应缓冲区或在 Sql Server 中调用的任何内容)。同时事务 T1 开始更新该行(它首先创建了版本化行)。
事务T2是否有可能读取未提交的数据?请记住,事务 T2 在 T1 进行更新之前开始复制该行,因此该行上没有排他锁。
这种情况是否可能发生?如果在复制数据期间不对该行设置共享锁,如何避免这种情况?