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

时间:2012-02-02 10:32:25

标签: sql sql-server-2005 tsql isolation-level

当我使用

时,我以不同的顺序获取行
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在我的存储过程中。

以下是存储过程中定义的查询。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

SELECT   CaseRateDetailId,AmtPerWeek
FROM    CaseRateDetails
WHERE   CaseRateInfoId = @CaseRateInfoId

它会像这样返回AmtPerWeek:

10000,15000,5000,20000,25000,..

当我在不使用

的情况下运行相同的查询时
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

语句以正确的顺序返回行,即5000,10000,15000,20000,25000,....

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

1 个答案:

答案 0 :(得分:10)

NOLOCKTABLOCK下,您可以获得一个allocation ordered scan,它按文件顺序读取页面,而不是遵循索引的叶级别。

它是否在执行计划中显示它是否使用此方法。如果没有ORDER BY,则无法保证订单。