如何仅在sql中为特定连接创建事务?

时间:2014-09-02 10:32:53

标签: c# sql-server tsql

我想在sql中为特定连接创建一个事务。它应该为所有连接锁定该表,但允许其他连接读取该表,即使该事务是从另一个连接开始的。我应该使用什么隔离级别。

Tran = CnnTran.BeginTransaction(IsolationLevel.RepeatableRead);            

1 个答案:

答案 0 :(得分:3)

对于选择查询,您可以使用WITH (NOLOCK)SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

READ UNCOMMITTED:指定语句可以读取已被其他事务修改但尚未提交的行。因此,select语句可以读取由其他未提交的事务更新的行。因此,需要在要读取该表的另一个连接上设置隔离级别。

如果您愿意,可以在连接处设置:

var myConnection = new SqlConnection();

// connection for reading uncommitted transactions
myConnection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();

如果您愿意,也可以在交易中完成:

using (var myConnection = new SqlConnection(connectionString)) {
    myConnection.Open();
    using (var transaction = myConnection.BeginTransaction(IsolationLevel.ReadUncommitted)) {
        // do stuff
        transaction.Commit();
    }
}