CREATEPROCEDURE StandardPaging_Template
@paramsVARCHAR(20),--以下爲分頁標準參數@recordTotalINT OUTPUT,--查詢總記錄數@pageSizeINT=50,--頁記錄數量@pageIndexINT=1--當前頁,如果爲-1,則返回所有數據ASSET NOCOUNT ON;BEGIN--定義表變量DECLARE@rstASTABLE(
ID INT,
NAME NVARCHAR(20),PRIMARYKEYCLUSTERED(ID))--處理篩選後的視圖INSERTINTO@rst(ID,NAME)SELECT ID,NAME
FROM tableName
--以下爲分頁標準處理段,對臨時表變量@rst進行分頁處理--讀取數據總行數量SELECT@recordTotal=Count(*)FROM@rst;--反饋分頁的數據DECLARE@startNumINT,@endNumINT;SET@startNum=@pageSize*(@pageIndex-1)+1;SET@endNum=@pageSize*@pageIndex;SELECT*FROM(SELECT ROW_NUMBER()OVER(ORDERBY ID)AS num,*FROM@rst)AS t
WHERE LTRIM(STR(@pageIndex))=-1OR num BETWEEN LTRIM(STR(@startNum))AND LTRIM(STR(@endNum))END
模板二:採用臨時表方式
CREATEPROCEDURE StandardPaging_Template
@paramsVARCHAR(20),--以下爲分頁標準參數@recordTotalINT OUTPUT,--查詢總記錄數@orderStr NVARCHAR(200),--排序串,如CJSJ DESC@pageSizeINT=50,--頁記錄數量@pageIndexINT=1--當前頁,如果爲-1,則返回所有數據ASSET NOCOUNT ON;BEGIN--處理篩選後的視圖SELECT*INTO#rstFROM tableName
--以下爲分頁標準處理段,對臨時表#rst進行分頁處理--讀取數據總行數量DECLARE@sql NVARCHAR(2000);SET@sql= N'select @cnt=count(*) from #rst';EXEC sp_executesql @sql, N'@cnt int output',@recordTotal OUTPUT;--反饋分頁的數據DECLARE@startNumINT,@endNumINT;SET@startNum=@pageSize*(@pageIndex-1)+1;SET@endNum=@pageSize*@pageIndex;SET@sql= N'
select * from
(select ROW_NUMBER() over(order by '+@orderStr+ N') as num, *
from #rst) as t
where '+ LTRIM(STR(@pageIndex))+ N'=-1 or num between '+ LTRIM(STR(@startNum))+ N' and '+ LTRIM(STR(@endNum));EXEC(@sql);--清空臨時表(表數據比較大的時候先清空再刪除效率高一點)TRUNCATETABLE#rst--刪除臨時表DROPTABLE#rstEND