代码之家  ›  专栏  ›  技术社区  ›  Michał Turczyn

SQL Server中的事务隔离级别

  •  5
  • Michał Turczyn  · 技术社区  · 8 年前

    我正在尝试更新控制应用程序的表(应用程序执行一些select语句)。我想更新事务中的表,将隔离级别设置为read uncommited,这样,如果应用程序不能按预期工作,我可以回滚事务。

    但以下代码不起作用:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    go
    
    begin transaction 
    go
    
    update [DB].[dbo].[Table] 
    set ID = ID - 281 
    where ID > 2
    

    当我打开另一个查询窗口时,我无法查询此表。。。我想,有了这样的事务级别,我就可以查询表,而无需回滚/提交事务。

    2 回复  |  直到 8 年前
        1
  •  3
  •   michal.jakubeczy    8 年前

    隔离级别的工作方式与您设想的不同。

    您只能读取未提交的数据,但在您提交之前,其他人仍然无法看到您在事务中所做的操作。

    如果要在select中查看此事务中的未提交数据,则需要设置

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    

    对此选择

        2
  •  3
  •   Sergey Menshov    8 年前

    您需要使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 从读取数据的会话。

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    
    SELECT *
    FROM [DB].[dbo].[Table]
    

    此查询将立即执行而不锁定。您将看到脏数据。