sql 通用分页存储过程

来源:互联网 发布:telnet 端口号是多少 编辑:程序博客网 时间:2024/04/29 16:35

sql 2005版本以上..
/******************************************************************
**檔案名:            P_PageData
**Copyright(c)          
**創建人:          
**創建日期:           
**修改人:         
**最後修改日期:       
**修改原因:
**描述:                分頁取得dataset數據
**輸入:                查尋的sql語句,當前頁,每頁行數
**輸出:               
記錄集1            (空sql結果集的結構),
記錄集2            (總條數Total,總頁數PageCount,當前頁CurPage),
記錄集3            (sql查詢返回的內容)
******************************************************************/
create PROCEDURE [dbo].[P_PageData]
@sqlstr nvarchar(3500),     --SQL字串
@curpage int,        --第N頁
@pagesize int        --每頁行數
AS
begin

set nocount on
declare @P1 int,        --P1是遊標的id
        @rowcount int, @pagecount int
SET @sqlstr = RTRIM(@sqlstr)
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
set @pagecount = ceiling(1.0*@rowcount/@pagesize)
if @curpage<=1
    set @curpage =1
if @curpage>@pagecount
    set @curpage=@pagecount
select @rowcount as Total, @pagecount as PageCount,@curpage as CurPage   
set @curpage=(@curpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@curpage,@pagesize
exec sp_cursorclose @P1
end