1. 程式人生 > >MS SQL 分頁存儲過程

MS SQL 分頁存儲過程

bsp RF class 自己 mon max sql rec none

最近換了家新公司,但是新公司沒有使用分頁的存儲過程。哎~~,硬著頭皮自己嘗試寫了一個,別說還挺好用的。(效率怎麽樣就不怎麽清除沒有詳細的測試過) 技術分享圖片
CREATE PROCEDURE [dbo].[pro_common_pageList]
    (
      @tab NVARCHAR(MAX) ,---表名
      @PrimaryKey VARCHAR(100) , --主鍵ID
      @strFld NVARCHAR(MAX) , --字段字符串
      @strWhere NVARCHAR(MAX) =   , --where條件 
      @IsDistinct
BIT , @PageIndex INT , --頁碼 @PageSize INT , --每頁容納的記錄數 @Order VARCHAR(255) = , --排序字段及規則,不用加order by @Sort VARCHAR(20) = desc , @TotalCount INT OUTPUT --總記錄數 ) AS BEGIN SET NOCOUNT ON; DECLARE @strSql VARCHAR(MAX); IF @strFld IS NULL
OR @strFld = BEGIN SET @strFld = *; END; IF @Order IS NULL OR @Order = BEGIN SET @Order = @PrimaryKey; END; --計算總記錄數 DECLARE @sqlRecordCount NVARCHAR(MAX); --得到總記錄條數的語句
DECLARE @recordCount INT; --保存總記錄條數的變量 DECLARE @distinct NVARCHAR(20)= ; IF @IsDistinct = 1 BEGIN SET @distinct = DISTINCT ; END; SET @sqlRecordCount = NSELECT @recordCount=COUNT(1) FROM (SELECT + @distinct + + @strFld + FROM + @tab + WHERE 1=1 + @strWhere + ) AS TEMPTABLE; EXEC sp_executesql @sqlRecordCount, N@recordCount int output, @recordCount OUTPUT; SET @TotalCount = @recordCount; --數據查詢 --當@PageIndex=1,使用TOP效率較快 IF @PageIndex = 1 BEGIN SET @strSql = SELECT + @distinct + TOP + STR(@PageSize) + + @strFld + ,0 AS rownum FROM + @tab + WHERE 1=1 + @strWhere + ORDER BY + @Order + + @Sort; END; ELSE BEGIN SET @strSql = SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY + @PrimaryKey + ) AS rownum FROM ; --是否去重:1去重 IF @IsDistinct = 1 BEGIN SET @strSql = @strSql + (SELECT DISTINCT + @strFld + FROM + @tab + WHERE 1=1 + @strWhere + ) AS S ; END; ELSE BEGIN SET @strSql = @strSql + + @tab + WHERE 1=1 + @strWhere; END; SET @strSql = @strSql + ) AS Dwhere WHERE Dwhere.rownum BETWEEN + CAST(( ( @PageIndex - 1 ) * @PageSize ) + 1 AS NVARCHAR(20)); SET @strSql = @strSql + AND + CAST(( @PageIndex * @PageSize ) AS NVARCHAR(20)); SET @strSql = @strSql + ORDER BY + @Order + + @Sort; END; PRINT(@strSql) EXEC (@strSql); SET NOCOUNT OFF; END;
View Code

MS SQL 分頁存儲過程