选择下一个50000条目

时间:2013-07-27 07:45:02

标签: sql-server sql-server-2012 ssms

我选择了带TOP 50,000的前50,000行,现在我想获得下一组50,000。我无法使用ROW_NUMBER,因为条目没有id。我在SQL Server Management Studio的帮助下使用SQL Server 2012。

如何获得前50,000个之后的条目?

2 个答案:

答案 0 :(得分:3)

使用SQL Server 2012,您可以在OFFSET子句中获得下一个FETCH NEXTORDER BY个关键字。

所以你可以用:

选择前50'000行
SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
  OFFSET 0 ROWS FETCH NEXT 50000 ROWS ONLY

然后接下来的50'000以后:

SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
  OFFSET 50000 ROWS FETCH NEXT 50000 ROWS ONLY

只是旁注:页面大小 50'000行似乎过于庞大 - 大概是1000左右还是什么?

有关详细信息和背景信息,请参阅Using the new OFFSET and FETCH NEXT options

答案 1 :(得分:0)

如果你有办法确保结果的顺序一致,我就看不出为什么你不能将row_number用于这样的公用表表达式:

;WITH CTE AS
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY something_unique DESC) AS 'Row'
    FROM my_table   
)
-- To get the first 50k rows:
SELECT * FROM CTE WHERE Row BETWEEN 0 AND 50000 
-- To get the next 50k rows:
--SELECT * FROM CTE WHERE Row BETWEEN 50001 AND 100000

尽管你只需要50k就可以在整个表格中构建行号,但这并不是很有效。如果可能,您可能需要考虑在源表中添加一个额外的列以包含一些人为的数字。

正如评论中所指出的,只是使用TOP X而没有排序结果首先会产生不一致的结果,因为如果没有明确指定,则无法保证订单。