我选择了第一个50000行TOP 50,000
,现在我想要得到下一个50,000的组。我无法使用ROW_NUMBER
,因为条目没有id
。我在SQL Server Management Studio的帮助下使用SQL Server 2012。选择接下来的50000个条目
如何获得第一个50,000后的条目?
我选择了第一个50000行TOP 50,000
,现在我想要得到下一个50,000的组。我无法使用ROW_NUMBER
,因为条目没有id
。我在SQL Server Management Studio的帮助下使用SQL Server 2012。选择接下来的50000个条目
如何获得第一个50,000后的条目?
如果你有一些方法,以保证结果的一致的顺序我看不出为什么你不能用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
这并不是虽然非常effecient即使您只需要50k,也可以在整个表上构建行号。如果可能的话,你可能要考虑在源表中增加一个额外的列来包含一些人工编号。
正如在注释中所指出的那样,如果没有明确指定,只是使用TOP X而没有先排序结果会导致结果不一致,因为顺序不能保证。
使用SQL Server 2012,您将获得ORDER BY
子句中的下一个OFFSET
和FETCH NEXT
关键字。
这样你就可以选择第50000行:
SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
OFFSET 0 ROWS FETCH NEXT 50000 ROWS ONLY
再下50000与更高版本:
SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
OFFSET 50000 ROWS FETCH NEXT 50000 ROWS ONLY
(只是一个侧面说明:一个页面的50'000行大小似乎过于大 - 怎么样1'000什么)
见?了解更多详细信息和背景信息
如果您在某列(例如您所说的id不存在的情况下)选择了没有'ORDER BY'的'top 50000',那么不能保证即使重新运行*相同*查询将返回* 50000行*更不用说任何方式来保证能够获得“下一个”50000。 –