SQL 服务器中的事务隔离级别

Transaction Isolations level in SQL Server

我正在尝试更新 table,它控制应用程序(应用程序执行一些 select 语句)。我想更新事务中的 table,将隔离级别设置为读取未提交,这样如果应用程序没有按预期工作,我可以回滚事务。

但是下面的代码不起作用:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
go

begin transaction 
go

update [DB].[dbo].[Table] 
set ID = ID - 281 
where ID > 2

当我打开另一个查询 window 时,我无法查询此 table... 我想,以这样的事务级别,我可以不滚动地查询 table back/commiting 笔交易。

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT *
FROM [DB].[dbo].[Table]

该查询将在没有锁定的情况下立即执行。你会看到脏数据。

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

你只能读取未提交的数据,但在你提交之前,其他人仍然看不到你在事务中做了什么。

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

到这个select