小编Mad*_*ads的帖子

从事务中创建的表中读取

我想查看正在进行事务的表中的数据。我将使用这个超级简单的临时表作为示例:

SELECT 5 AS NUMBER INTO ##temptable
Run Code Online (Sandbox Code Playgroud)

我将创建一个事务来插入数字为 10 的新行:

BEGIN TRAN;
    INSERT INTO ##temptable 
    SELECT 10 AS Number
    WAITFOR DELAY '00:00:20';
COMMIT TRAN;
Run Code Online (Sandbox Code Playgroud)

现在,如果我打开一个新查询,并执行常规 select 语句,我将不会得到任何结果,轮子将一直旋转,直到事务提交。我可以将隔离级别设置为已提交读:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Run Code Online (Sandbox Code Playgroud)

我希望这会返回已提交的数字 5,但不会返回未提交的数字 10,但我再次得到一个旋转轮。我想事情并不是这样的。

如果我将隔离级别设置为读取未提交:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Run Code Online (Sandbox Code Playgroud)

这成功地从表中返回两个数字。

但我仍然有一个问题,因为我想在事务内部创建表,如下所示:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRAN;
    SELECT 5 AS NUMBER INTO ##temptable

    INSERT INTO ##temptable 
    SELECT 10 AS Number
    WAITFOR DELAY '00:00:20';
COMMIT TRAN;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果我尝试从表中读取数据,即使将隔离级别设置为读取未提交的数据,我也会再次陷入困境。

有什么方法可以从正在进行的事务中创建的表中读取数据吗?

sql-server transaction isolation-level

2
推荐指数
1
解决办法
799
查看次数

标签 统计

isolation-level ×1

sql-server ×1

transaction ×1