我正在寻找一些这样的表达(使用sql Server 2008)
SELECT TOP 10 columName FROM tableName
但是,而不是我需要10到20之间的值.我想知道是否有一种方法只使用一个SELECT语句.
例如这是没用的:
SELECT columName FROM (SELECT ROW_NUMBER() OVER(ORDER BY someId) AS RowNum,* FROM tableName) AS alias WHERE RowNum BETWEEN 10 AND 20
因为选择内部的括号已经返回所有的结果,我期待避免,由于性能.
解决方法
row_number有一个技巧,它不涉及排序所有的行.
尝试这个:
SELECT columName FROM (SELECT ROW_NUMBER() OVER(ORDER BY (select NULL as noorder)) AS RowNum,* FROM tableName ) as alias WHERE RowNum BETWEEN 10 AND 20
你不能按顺序使用常数.但是,您可以使用一个计算为常量的表达式. sql Server可以识别这一点,只返回遇到的行,并正确枚举.