SQL Server通用分页存储过程:利用SQL Server未公开的存储过程实现

本文介绍了一个用于SQL Server的分页存储过程实现方法,通过定义存储过程SplitPage,支持传入查询命令、当前页索引等参数,实现数据的分页查询,并返回总记录数及总页数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储过程定义:

CREATE procedure [dbo].[SplitPage]
(
    
@SelectCommandText nvarchar(4000), -- 要执行的查询命令
    @CurrentPageIndex int = 0,  -- 当前页的索引,从 0 开始
    @PageSize int = 20,  -- 每页的记录数
    @RowCount int = 0 out, -- 总的记录数
    @PageCount int = 0 out -- 总的页数
)
AS

IF @PageSize <= 0
BEGIN
    
RAISERROR('参数 PageSize 必须大于零。'161);
    
RETURN
END

DECLARE @p1 int
DECLARE @RowIndex int

SET @CurrentPageIndex = @CurrentPageIndex + 1

EXEC    sp_cursoropen
        
@p1 output,
        
@SelectCommandText,
        
@scrollopt = 1,
        
@ccopt = 1,
        
@RowCount = @RowCount output;

SET @PageCount = ceiling(1.0 * @RowCount / @PageSize);

SET @RowIndex = (@CurrentPageIndex - 1* @PageSize + 1

EXEC    sp_cursorfetch
        
@p1,
        
16,
        
@RowIndex,
        
@PageSize;

EXEC    sp_cursorclose
        
@p1

 

 调用方法:

DECLARE    @return_value int,
        
@RowCount int,
        
@PageCount int

EXEC    @return_value = [dbo].[SplitPage]
        
@SelectCommandText = N'SELECT * FROM Log',
        
@CurrentPageIndex = 0,
        
@PageSize = 4,
        
@RowCount = @RowCount OUTPUT,
        
@PageCount = @PageCount OUTPUT

SELECT    @RowCount as N'@RowCount',
        
@PageCount as N'@PageCount'

SELECT    'Return Value' = @return_value

GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值