use*_*439 4 sql sql-server-2008
是否可以检索特定范围的结果?我知道如何做 TOP x 但我将检索的结果太大并且会超时。我希望能够选择前 10,000 个结果,然后是接下来的 10,000 个结果,依此类推。这可能吗?
实际上,所有 SQL DB 实现都有一种指定要返回的起始行以及行数的方法。
例如,在 mysql 和 postgres 中,它看起来像:
SELECT ...
ORDER BY something -- not required, but highly recommended
LIMIT 100 -- only get 100 rows
OFFSET 500; -- start at row 500
Run Code Online (Sandbox Code Playgroud)
请注意,通常您会包含一个ORDER BY
以确保您的块是一致的
MS SQL Server(作为“假装”数据库)不直接支持 OFFSET,但可以使用它进行编码ROW_NUMBER()
-有关更多详细信息,请参阅此 SO 帖子。
WITH Q AS (
SELECT ROW_NUMBER() OVER (ORDER BY ...some column) AS N, ...other columns
FROM ...some table
) SELECT * FROM Q WHERE N BETWEEN 1 AND 10000;
Run Code Online (Sandbox Code Playgroud)
在这里阅读有关 ROW_NUMBER() 的更多信息: http://msdn.microsoft.com/en-us/library/ms186734.aspx