Listing 1: [Need a Caption Here] /* Connection 1: For full snapshot isolation, we must set it at the session level, because the database option only enables it, it doesn't actually turn it on. */ USE testdb SET TRANSACTION ISOLATION LEVEL SNAPSHOT BEGIN TRAN SELECT A FROM t WHERE K =1 --SQL Server returns 5. -- Connection 2: USE testdb BEGIN TRAN SELECT A FROM t WHERE K =1 --SQL Server returns 5. -- Connection 3: USE testdb UPDATE t SET A = 9 WHERE K = 1 --Connection 3 performs the update and auto commits the transaction. -- Back to Connection 1 SELECT A FROM t WHERE K =1 -- SQL Server still returns 5. -- Back to Connection 2 SELECT A FROM t WHERE K =1 -- SQL Server returns 9. /* Back to Connection 3 You can start another update on Connection 3 before Connection 1 or 2 commits. */ UPDATE t SET A = 11 WHERE K = 1