SQL Server通用分頁存儲過程兩種用法
從SQLSERVER 2005開始,提供了Row_Number()函數(shù),利用函數(shù)生成的Index來處理分頁,
按照正常的邏輯思維都是傳pageIndex和pageSize來完成分頁,昨天前端和我溝通,
他們使用jQuery.DataTable.js插件,而且經(jīng)過了公司底層的封裝,
pageIndex需要變動一下,變成pageIndex*pageSize來傳。
也就是說按每頁顯示30條算,第一次傳0,第二次傳30這樣來計算,我也是醉了。
1、傳pageIndex和pageSize
CREATE PROC [dbo].[Common_PageList] ( @tab nvarchar(max),---表名 @strFld nvarchar(max), --字段字符串 @strWhere varchar(max), --where條件 @PageIndex int, --頁碼 @PageSize int, --每頁容納的記錄數(shù) @Sort VARCHAR(255), --排序字段及規(guī)則,不用加order by @IsGetCount bit --是否得到記錄總數(shù),1為得到記錄總數(shù),0為不得到記錄總數(shù),返回記錄集 ) AS declare @strSql nvarchar(max) set nocount on; if(@IsGetCount = 1) begin set @strSql='SELECT COUNT(0) FROM ' @tab ' WHERE ' @strWhere end else begin set @strSql=' SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ' @Sort ') AS rownum, ' @strFld ' FROM ' @tab ' where ' @strWhere ') AS Dwhere WHERE rownum BETWEEN ' CAST(((@PageIndex-1)*@PageSize 1) as nvarchar(20)) ' and ' cast((@PageIndex*@PageSize) as nvarchar(20)) end exec (@strSql) set nocount off;2、傳pageIndex*pageSize和pageSize
CREATE PROC [dbo].[Common_PageList2] ( @tab nvarchar(max),---表名 @strFld nvarchar(max), --字段字符串 @strWhere varchar(max), --where條件 @StartIndex int, -- 開始行數(shù) @PageSize int, --每頁容納的記錄數(shù) @Sort VARCHAR(255), --排序字段及規(guī)則,不用加order by @IsGetCount bit --是否得到記錄總數(shù),1為得到記錄總數(shù),0為不得到記錄總數(shù),返回記錄集 ) AS DECLARE @strSql NVARCHAR(max) SET NOCOUNT ON; IF(@IsGetCount = 1) BEGIN SET @strSql='SELECT COUNT(0) FROM ' @tab ' WHERE ' @strWhere END ELSE BEGIN DECLARE @ENDINDEX INT IF(@StartIndex>0) BEGIN SET @ENDINDEX=@StartIndex @PageSize SET @StartIndex=@StartIndex 1 END ELSE SET @ENDINDEX=@StartIndex @PageSize SET @strSql=' SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY ' @Sort ') AS rownum, ' @strFld ' FROM ' @tab ' where ' @strWhere ') AS Dwhere WHERE rownum BETWEEN ' CAST(@StartIndex AS VARCHAR(30)) ' and ' CAST(@ENDINDEX AS VARCHAR(30)) end exec (@strSql) SET NOCOUNT OFF;