SQLServer中的行偏移量

SQLServer中的行偏移量

SQLServer中是否有任何方法从给定的偏移量开始获取结果?例如,在另一种类型的SQL数据库中,可以这样做:

SELECT * FROM MyTable OFFSET 50 LIMIT 25

才能得到51-75的结果。此结构似乎不存在于SQLServer中。

在不加载我不关心的所有行的情况下,我如何做到这一点?谢谢!


潇潇雨雨
浏览 1358回答 3
3回答

蛊毒传说

我会避免使用SELECT *..指定实际需要的列,即使这些列可能都是。SQLServer 2005+SELECT col1, col2  FROM (     SELECT col1, col2, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum    FROM MyTable) AS MyDerivedTableWHERE MyDerivedTable.RowNum BETWEEN @startRow AND @endRowSQLServer 2000SQL Server 2000中大结果集的高效寻呼一种更有效的大结果集寻呼方法

摇曳的蔷薇

如果您要按顺序处理所有页面,那么只需记住上一页上看到的最后一个键值,然后使用TOP (25) ... WHERE Key > @last_key ORDER BY Key如果存在适当的索引以允许有效地查找该索引,则可以是最佳的执行方法-或API游标如果他们不这么做的话。对于选择任意页面,SQLServer 2005-2008 R2的最佳解决方案可能是ROW_NUMBER和BETWEEN对于SQLServer 2012+,可以使用增强的命令这一需要的条款。SELECT  *FROM     MyTable  ORDER BY OrderingColumn ASC OFFSET  50 ROWS FETCH NEXT 25 ROWS ONLY尽管这个选项的执行情况还有待观察。.

慕标琳琳

这是一种方法(SQL 2000)SELECT * FROM(     SELECT TOP (@pageSize) * FROM     (         SELECT TOP (@pageNumber * @pageSize) *         FROM tableName          ORDER BY columnName ASC     ) AS t1      ORDER BY columnName DESC) AS t2  ORDER BY columnName ASC这是另一种方法(Sql 2005);WITH results AS (     SELECT          rowNo = ROW_NUMBER() OVER( ORDER BY columnName ASC )         , *     FROM tableName  ) SELECT * FROM resultsWHERE rowNo between (@pageNumber-1)*@pageSize+1 and @pageNumber*@pageSize
打开App,查看更多内容
随时随地看视频慕课网APP