這個存儲過程執行的速度還不錯.500W速度分頁只要2秒,任何頁數

這個存儲過程執行的速度還不錯.500W速度分頁只要2秒,任何頁數
但是有點問題就是,若是排序不是主鍵,ID,那麼分頁就會出錯,不知道各位有什麼好個意見,修改一下
-------------------------------------------------------


 sql

SQL code
    
    
    
    
create procedure SqlDataPaging @tbName varchar ( 255 ), -- 表名 @tbFields varchar ( 1000 ), -- 返回字段 @OrderField varchar ( 255 ), -- 排序的字段名 @PageSize int , -- 頁尺寸 @PageIndex int , -- 頁碼 @OrderType bit , -- 排序類型,1是升序,0是降序 @strWhere varchar ( 1500 ), -- 查詢條件 @Total int output -- 返回總記錄數 as declare @strSql varchar ( 5000 ) -- 主語句 declare @strOrder varchar ( 200 ) -- 排序 declare @strSqlCount nvarchar ( 500 ) -- 查詢記錄總數主語句 declare @strtemp varchar ( 50 ) -- 排序附加語句 -- ------------排序-----------------1是降序,0未升序 if @OrderType != 0 begin set @strtemp = ' >(select max( ' set @strOrder = ' order by ' + @OrderField + ' asc ' end else begin set @strtemp = ' <(select min( ' set @strOrder = ' order by ' + @OrderField + ' desc ' end -- ------------總記錄數--------------- if @strWhere != '' begin set @strSqlCount = ' Select @TotalCout=count(*) from ' + @tbName + ' where ' + @strWhere end else begin set @strSqlCount = ' Select @TotalCout=count(*) from ' + @tbName end -- ------------若是是第一頁------------ if @PageIndex = 1 begin if @strWhere != '' begin set @strSql = ' Select top ' + str ( @PageSize ) + ' ' + @tbFields + ' from ' + @tbName + ' where ' + @strWhere + ' ' + @strOrder end else begin set @strSql = ' Select top ' + str ( @PageSize ) + ' ' + @tbFields + ' from ' + @tbName + ' ' + @strOrder end end else begin if @strWhere != '' begin set @strSql = ' Select top ' + str ( @PageSize ) + ' ' + @tbFields + ' from ' + @tbName + ' where ' + @OrderField + ' ' + @strtemp + ' ' + @OrderField + ' ) from (select top ' + str (( @PageIndex - 1 ) * @PageSize ) + ' ' + @OrderField + ' from ' + @tbName + @strWhere + ' ' + @strOrder + ' ) as tb) ' + @strOrder end else begin set @strSql = ' Select top ' + str ( @PageSize ) + ' ' + @tbFields + ' from ' + @tbName + ' where ' + @OrderField + ' ' + @strtemp + ' ' + @OrderField + ' ) from (select top ' + str (( @PageIndex - 1 ) * @PageSize ) + ' ' + @OrderField + ' from ' + @tbName + ' ' + @strOrder + ' ) as tb) ' + @strOrder end end exec sp_executesql @strSqlCount ,N ' @TotalCout int output ' , @Total output exec ( @strSql )
相關文章
相關標籤/搜索