繁体   English   中英

获取 SQL 导致零件

[英]Getting SQL results in parts

我知道我可以使用TOP关键字来限制接收到的结果的计数,但是有没有办法使用类似<give me the next 1000 results>这样的东西来接收下一个让说 1000 个结果,每次下一个缓存的 1000 个结果给我?

所以假设我的查询有 100000 并且第一次运行我得到 1-1000 我想收到 1000-2000 等等。

当数据在查询之间发生变化时,rownum/between 解决方案将为您提供下一个数据块的近似值。

如果您需要从固定结果中获取特定数据块,请将所有结果插入表中,然后根据需要使用数据。 结果将保持不变,直到您再次刷新表中的数据。

当您必须获得准确的下一组(向前或向后)时,这很有效。 这可能很有用,具体取决于您的情况。

你可以使用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

使用ROW_NUMBER function 在子查询或CTE中根据需要对数据进行排序。 然后来自该子查询/CTE 的 select 具有所需的值(例如, WHERE RowNum > 1000 AND RowNum <= 2000 )。

假设有下表

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 条记录。

希望这会帮助你。

如果有任何混淆,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM