On this page
- Q.1. What is The Snapshot Isolation Level?
- Q.2. How Does The Snapshot Isolation Level Work?
- Q.3. Explain The Read Committed Snapshot Isolation Level?
- Q.4. How to Use The Read Committed Snapshot Isolation Level?
- Q.5. Is There any Difference Between Isolation Levels Defined in ADO.NET and SQL Server?
- Q.6. What are Isolation Levels defined in ADO.NET 2.0 in the System.Data.IsolationLevel catalog?
- Q.7. How Can you Set The Isolation Level for Certain ADO.NET Transactions?
- Q.8. How to Set The Isolation Level for Implicit ADO.NET Transactions?
- Conclusion
Q.1. What is The Snapshot Isolation Level?
Ans: The Snapshot Isolation Level is a feature introduced in SQL Server 2005 to address issues with application architectures where even small transactions can become problematic or transactions that modify large amounts of data cannot be kept short in duration. This isolation level provides consistent reads without causing blocking.
Transactions running under snapshot isolation do not create shared locks on the rows being read. Repeated requests for the same data within a snapshot transaction yield the same results, ensuring repeatable reads without blocking. This combines the responsiveness of reading uncommitted data with the consistency of repeatable reading.
Q.2. How Does The Snapshot Isolation Level Work?
Ans: The Snapshot Isolation Level utilizes the tempdb database to store previously committed versions of rows, enabling nonblocking, repeatable read behavior. When a transaction writes data, other transactions that started before the current transaction and have already read the previous version will continue to read it from tempdb. This allows the write to occur without blocking, and other transactions will see the new version. However, enabling snapshot isolation adds overhead to the tempdb database, so it should be used judiciously.
To enable snapshot isolation level in SQL Server, you can use the following statement:
ALTER DATABASE MyDB SET ALLOW_SNAPSHOT_ISOLATION ON
Once snapshot isolation is enabled for a database, you can use it on independent connections using the SET TRANSACTION ISOLATION LEVEL statement:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
To learn more about the Snapshot Isolation Level, consider taking an SQL online class.
Q.3. Explain The Read Committed Snapshot Isolation Level?
Ans: The Read Committed Snapshot Isolation Level is a variation of snapshot isolation that aims to prevent writers from blocking readers. It provides data from a previously committed version, ensuring repeatable reads throughout the transaction. However, it reduces some of the overhead and bookkeeping associated with snapshot isolation.
With Read Committed Snapshot Isolation, data consistency is ensured for the duration of a read query within a transaction, but not for the entire transaction that contains the reader. This means that readers are not blocked, and they can either see a previous state of data (before any write operations) or a new state of data (after write operations), depending on the state of other concurrently running transactions.
Q.4. How to Use The Read Committed Snapshot Isolation Level?
Ans: To enable the Read Committed Snapshot Isolation Level at the database level, you can use the following T-SQL command:
USE master GO ALTER DATABASE MyDB SET READ_COMMITTED_SNAPSHOT ON
Note:- The USE master statement is used to exit the MyDB database before executing the ALTER statement. The ALTER statement will wait until there are no active connections to MyDB before applying the change.
Once the Read Committed Snapshot Isolation Level is enabled for a table, all queries using the read committed isolation level will behave like snapshots. However, this isolation level does not allow for repeatable reads throughout a transaction.
Q.5. Is There any Difference Between Isolation Levels Defined in ADO.NET and SQL Server?
Ans: There is a slight mismatch between the isolation levels stated in ADO.NET, which is a general data access technology supporting multiple databases, and the isolation levels defined in SQL Server. ADO.NET supports other databases like Oracle in addition to SQL Server, so the isolation levels need to be generalized.
Q.6. What are Isolation Levels defined in ADO.NET 2.0 in the System.Data.IsolationLevel catalog?
Ans: The isolation levels defined in ADO.NET 2.0 under the System.Data.IsolationLevels enumeration are as follows:
- Chaos: Changes from more isolated transactions cannot overwrite pending changes. This option is not supported by SQL Server and Oracle.
- ReadUncommitted: Similar to read uncommitted in SQL Server, no shared locks are added, and no exclusive locks are honored.
- ReadCommitted: Shared locks are held while reading data, similar to reading committed in SQL Server. This eliminates dirty reads but may allow nonrepeatable and phantom reads.
- RepeatableRead: Shared locks are added to all data used in the query's predicate, similar to repeatable reads in SQL Server. This prevents dirty and nonrepeatable reads but may still allow phantom reads.
- Snapshot: Similar to the snapshot isolation level in SQL Server, it provides a snapshot of earlier data while allowing repeatable reads with nonblocking selects. Not to be confused with SQL Server's read committed snapshot isolation level, which must be enabled at the database level.
- Serializable: Ideal for exclusive locks on data, preventing other users from reading or modifying the data.
- Unspecified: A catch-all isolation level for databases that helps cover isolation levels not explicitly defined by other options.
SQL Server Training & Certification
- Personalized Free Consultation
- Access to Our Learning Management System
- Access to Our Course Curriculum
- Be a Part of Our Free Demo Class

Q.7. How Can you Set The Isolation Level for Certain ADO.NET Transactions?
Ans: You can declare an isolation level for an explicit ADO.NET transaction as a parameter to the BeginTransaction method. For example:
SqlTransaction tran = conn.BeginTransaction(IsolationLevel.ReadUncommitted);
In this case, any SqlCommand with the Transaction property set to tran will ignore exclusive locks and allow dirty reads on data held by other transactions.
Q.8. How to Set The Isolation Level for Implicit ADO.NET Transactions?
Ans: Implicit ADO.NET transactions are recommended over explicit ones. To set the isolation level for implicit ADO.NET transactions, create a new TransactionOptions object and set its IsolationLevel property to the required catalog value. Then pass the TransactionOptions object to the TransactionScope object's constructor. For example:
var tso = new TransactionOptions();
tso.IsolationLevel = IsolationLevel.ReadUncommitted;
using (var ts = new TransactionScope(tso))
{
// ... update data
// ... update data
ts.Complete();
}
Conclusion
In this blog post, we delved into two crucial isolation levels in SQL Server - Snapshot Isolation Level and Read Committed Snapshot Isolation Level. We saw that the Snapshot Isolation Level provides consistent reads without causing blocking and combines the responsiveness of reading uncommitted data with the consistency of repeatable reading. On the other hand, the Read Committed Snapshot Isolation Level ensures data consistency for read queries within a transaction without blocking readers.
To use these isolation levels, we explored how to enable them at the database level using T-SQL commands. We also learned about setting isolation levels explicitly for ADO.NET transactions and implicitly for ADO.NET transactions using the TransactionScope object.
Additionally, we discussed the differences between isolation levels defined in ADO.NET and SQL Server, which are important to consider when working with different databases.
If you want to strengthen your understanding of isolation levels, their impact on locking, and how to choose the most suitable level for your database scenarios, we recommend joining an SQL online class. Building a solid foundation in this area will enhance your ability to design and manage robust, high-performing database systems.