我开了两个sql2005查询分析器第一个分析器:
set transaction isolation level read uncommitted
begin tran
update Emp set Name='wj1a' where Code=1
--rollback tran第二个分析器:
select Name from Emp where Code=1
我已经设置事务隔离级别为 uncommitted,可还是不允许我脏读,
怎么解决啊??

解决方案 »

  1.   

    第一个分析器:begin tran
    update Emp set Name='wj1a' where Code=1
    --rollback tran第二个分析器:
    set transaction isolation level read uncommittedselect Name from Emp where Code=1
      

  2.   

    --测试数据建立
    IF OBJECT_ID('TBTRAN','U') IS NOT NULL DROP TABLE TBTRAN 
    GO
    CREATE TABLE TBTRAN(ID INT, NAME VARCHAR(10))
    INSERT TBTRAN
    SELECT 1,'A' UNION ALL
    SELECT 2,'B'--SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    --查询窗口一
    BEGIN TRAN
    UPDATE TBTRAN SET NAME='C' WHERE ID=1
    GO
    WAITFOR DELAY '00:00:10'
    ROLLBACK TRAN
    --查询窗口二
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    SELECT * FROM TBTRAN
    WAITFOR DELAY '00:00:10'
    SELECT * FROM TBTRAN
    /*
    ID          NAME       
    ----------- ---------- 
    1           C
    2           B(所影响的行数为 2 行)ID          NAME       
    ----------- ---------- 
    1           A
    2           B(所影响的行数为 2 行)*/
      

  3.   

    我已经设置事务隔离级别为 uncommitted,可还是不允许我脏读,
    怎么解决啊??你要脏读,设置的级别在更新那里?
      

  4.   

    一.
    begin tran
    update Emp set Name='wj1a' where Code=1二.
    set transaction isolation level read uncommitted
    select Name from Emp where Code=1
      

  5.   

    http://blog.csdn.net/happyflystone建议你看一下石头哥博客里的事务和锁定
      

  6.   

    Microsoft® SQL Server™ 2000 具有多粒度锁定,允许一个事务锁定不同类型的资源。为了使锁定的成本减至最少,SQL Server 自动将资源锁定在适合任务的级别。锁定在较小的粒度(例如行)可以增加并发但需要较大的开销,因为如果锁定了许多行,则需要控制更多的锁。锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少。SQL Server 可以锁定以下资源(按粒度增加的顺序列出)。资源 描述 
    RID 行标识符。用于单独锁定表中的一行。 
    键 索引中的行锁。用于保护可串行事务中的键范围。 
    页 8 千字节 (KB) 的数据页或索引页。 
    扩展盘区 相邻的八个数据页或索引页构成的一组。 
    表 包括所有数据和索引在内的整个表。 
    DB 数据库。