我知道我可以使用TOP
关键字来限制收到结果的数量,但有没有办法使用类似<give me the next 1000 results>
的内容接收下一个1000个结果缓存了1000个?
假设我的查询有100000,第一次运行我得到1-1000我希望收到1000-2000等等。
答案 0 :(得分:5)
当数据在查询之间变化时,rownum / between解决方案将为您提供下一个数据块的近似值。
如果需要从固定结果中获取特定数据块,请将所有结果插入表中,然后根据需要使用数据。结果将保持不变,直到您再次刷新表中的数据为止。
当你必须得到确切的下一组(向前或向后)时,这很有效。根据您的具体情况,这可能很有用。
答案 1 :(得分:3)
您可以使用ROW_NUMBER()
SELECT
col1,
col2
FROM
(
SELECT
col1,
col2,
ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
FROM
MyTable
) AS MyDerivedTable
WHERE
MyDerivedTable.RowNum BETWEEN @startRow AND @endRow
答案 2 :(得分:0)
使用ROW_NUMBER功能根据需要在子查询或CTE中对数据进行排序。然后从具有所需值的子查询/ CTE中选择(例如,WHERE RowNum > 1000 AND RowNum <= 2000
)。
答案 3 :(得分:0)
假设有以下表格
create table #temp
(
ID int Identity(1,1) ,
name varchar(1000)
)
假设表格中有以下记录
select * from #temp
我们首先声明以下变量
Declare @PageIndex INT
//表示起始索引,表示您的页码
Declare @PageSize INT
//您希望在页面中显示的记录总数
Set @PageIndex = 1
Set @PageSize = 10
我正在设置页面大小= 10,因为我的表中只有15条记录。但您可以将此数字替换为1000或甚至大于此数字。
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ID)
AS Row, * FROM #temp
)T WHERE Row between
(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
如果您执行以下查询,它将在屏幕截图中为您提供以下记录。
使用以下查询移至第二页。
Declare @PageIndex INT
Declare @PageSize INT
set @PageIndex = 2
set @PageSize = 10
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ID)
AS Row, * FROM #temp
)T WHERE Row between
(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
结果将在屏幕截图中显示。
所以类似地你可以检查1000条记录。
希望这会对你有所帮助。
如果有任何混淆,请告诉我。