交易隔离级别问题

时间:2017-02-16 20:28:46

标签: c# sql-server tsql transactions isolation-level

我一直在阅读交易隔离级别,我不确定我是否理解正确。我需要帮助。

请考虑以下Csharp伪代码:

  1. 使用存储过程1,打开事务
  2. 插入或更新表1
  3. 使用存储过程2,根据表1中的数据插入或更新表2
  4. 提交交易。
  5. 在步骤3中,我怎样才能不考虑步骤2中更新的数据?我在.Net代码中创建事务时应该设置事务隔离级别。这是SQL服务器存储过程的伪代码。

    select @count=count(*) from table1;
    if @count > 1
    update table2
    

2 个答案:

答案 0 :(得分:1)

只是更改订单并不能解决您的问题?我的意思是,如果步骤2更改了表1数据,并且您需要完整地执行步骤3,请先执行步骤3。它看起来像这样:

  1. 开放交易
  2. 执行程序2
  3. 执行程序1
  4. 关闭交易
  5. 考虑到您刚评论的内容,您可能需要使用 IsolationLevel.Snapshot 。但是,某些数据库默认情况下不启用此功能。当您更新源表时,它基本上创建了当前数据的副本到tempdb。

答案 1 :(得分:0)

据我所知,没有任何隔离级别允许您在修改后访问行的先前版本。

要实现您的要求,您需要修改第2步以跟踪其更改内容并使其可用于第3步。否则,您需要将触发器添加到步骤2中修改的表中并跟踪这种变化。