查询前后的rowcount

时间:2011-08-26 01:33:52

标签: sql tsql

有人可以解释这两个简单查询之间的区别......

SET ROWCOUNT = 10
select * from t_Account order by account_date_last_maintenance

和这一个

select * from t_Account order by account_date_last_maintenance
SET ROWCOUNT = 10

执行时都只返回10行,但行不同。如果重要的话,表中有数百万行。此外,第一个查询的运行时间延长了20%。

谢谢大家

1 个答案:

答案 0 :(得分:3)

当您执行SET ROWCOUNT 10时,您告诉SQL在返回10个结果后停止查询。您的第一个SQL语句是正确的语法(第一行应该读取SET ROWCOUNT 10除外)。

写入的第二个语句将返回最初执行时排序的所有值,然后将行计数设置为10,因此任何后续执行都将返回前10个项目。

ROWCOUNT必须设置为0才能恢复“正常”执行。

至于为什么事情以不同的方式返回,每次都可能无法对数据进行相同的处理,并且根据数据集的大小,您很可能有时会得到匹配的结果,但这不是一个确定的事情。如果你想要一致的结果,只想要前10个结果,我建议使用TOP。