如何解决分部分获取SQL结果
| 我知道我可以使用TOP
关键字来限制接收结果的数量,但是有没有一种方法可以使用something1ѭ来接收下一个让我说的1000个结果,而每次下一次缓存1000个时,我都会得到一次?
因此,假设我的查询有100000,第一次运行我得到1-1000,我希望收到1000-2000,依此类推。
解决方法
您可以使用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
,当数据在查询之间更改时,rownum /之间的解决方案将为您提供下一个数据块的近似值。
如果需要从固定结果中获取特定数据块,请将所有结果插入表中,然后根据需要使用数据。结果将保持不变,直到您再次刷新表中的数据。
当您必须获得精确的下一组(向前或向后)时,此方法效果很好。这可能有用,具体取决于您的情况。
,使用ROW_NUMBER函数在子查询或CTE中根据需要对数据进行排序。然后从子查询/ CTE中选择所需的值(例如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条记录。
希望这会帮助你。
如有任何疑问,请通知我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。