簡單有效的分頁存儲過程

/*--分頁存儲過程:*/
    CREATE PROCEDURE [dbo].[sp_Pagination]
    @sqlstr nvarchar(4000), --查詢字符串
    @pageindex int,--第N頁
    @pagesize int--每頁行數
AS
BEGIN
    set nocount on
    declare @P1 int,--P1是遊標的id
    @rowcount int

    --rowsum:總行數,pagesum:總頁數
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    --select @rowcount as rowsum,ceiling(1.0*@rowcount/@pagesize) as pagesum,@pageindex as currentpage
   
    --獲取數據讀取遊標
    set @pageindex=(@pageindex-1)*@pagesize+1
    --如果讀取行數大於總記錄數,從第一行數據開始讀取數據
    IF @pageindex>@rowcount
    begin
    set @pageindex=1
    end
    exec sp_cursorfetch @P1,16,@pageindex,@pagesize
    exec sp_cursorclose @P1
END
GO


/*--分頁存儲過程:*/
    CREATE PROCEDURE [dbo].[sp_Pagination]
    @sqlstr nvarchar(4000), --查詢字符串
    @pageindex int,--第N頁
    @pagesize int--每頁行數
AS
BEGIN
    set nocount on
    declare @P1 int,--P1是遊標的id
    @rowcount int

    --rowsum:總行數,pagesum:總頁數
    exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
    --select @rowcount as rowsum,ceiling(1.0*@rowcount/@pagesize) as pagesum,@pageindex as currentpage
   
    --獲取數據讀取遊標
    set @pageindex=(@pageindex-1)*@pagesize+1
    --如果讀取行數大於總記錄數,讀取最後一頁數據數據
    IF @pageindex>@rowcount
    begin
    set @pageindex=(ceiling(1.0*@rowcount/@pagesize) -1)*@pagesize+1
    end
    exec sp_cursorfetch @P1,16,@pageindex,@pagesize
    exec sp_cursorclose @P1
END
GO

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章