为什么"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"以不同的顺序返回行?

Diy*_*han 7 sql t-sql sql-server-2005 isolation-level

当我使用时,我以不同的顺序获取行

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

在我的存储过程中.

下面是存储过程中定义的查询.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT   CaseRateDetailId,AmtPerWeek
FROM    CaseRateDetails
WHERE   CaseRateInfoId = @CaseRateInfoId
Run Code Online (Sandbox Code Playgroud)

它返回AmtPerWeek,如下所示:

10000,15000,5000,20000,25000,..
Run Code Online (Sandbox Code Playgroud)

当我不使用时运行相同的查询

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

声明它以正确的顺序返回行,即 5000,10000,15000,20000,25000,....

我可以在上面的查询中使用AmtPerWeek子句的顺序,但我想知道它的行为是这样的原因吗?为什么改变行的顺序?

Mar*_*ith 10

NOLOCK或者TABLOCK你可以获得一个分配有序扫描,它按文件顺序读取页面,而不是遵循索引的叶级别.

它是否在执行计划中显示它是否使用此方法.没有ORDER BY没有订单有保证.