通用高效分頁存儲過程

-- 獲取指定頁的數據  CREATE PROCEDURE dbo.pagination @tblName varchar(255), -- 表名  @strGetFields varchar(1000= '*'-- 需要返回的列  @fldName varchar(255)=''-- 排序的字段名  @PageSize int = 10-- 頁尺寸  @PageIndex int = 1-- 頁碼  @doCount bit = 0-- 返回記錄總數, 非 0 值則返回  @OrderType bit = 0-- 設置排序類型, 非 0 值則降序  @strWhere varchar(1500= '' -- 查詢條件 (注意: 不要加 where)  AS  declare @strSQL varchar(5000-- 主語句  declare @strTmp varchar(110-- 臨時變量  declare @strOrder varchar(400-- 排序類型  if @doCount != 0  begin  if @strWhere !=''  set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere  else  set @strSQL = 'select count(*) as Total from [' + @tblName + ']'  end  --以上代碼的意思是如果@doCount傳遞過來的不是0,就執行總數統計。以下的所有代碼都是@doCount爲0的情況  else  begin  if @OrderType != 0  begin  set @strTmp = '<(select min'  set @strOrder = ' order by [' + @fldName +'] desc'  --如果@OrderType不是0,就執行降序,這句很重要!  end  else  begin  set @strTmp = '>(select max'  set @strOrder = ' order by [' + @fldName +'] asc'  end  if @PageIndex = 1  begin  if @strWhere != ''  set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder  else  set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ ' from ['+ @tblName + ''+ @strOrder  --如果是第一頁就執行以上代碼,這樣會加快執行速度  end  else  begin  --以下代碼賦予了@strSQL以真正執行的SQL代碼  set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ ' from ['  + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder  if @strWhere != ''  set @strSQL = 'select top ' + str(@PageSize+' '+@strGetFields+ ' from ['  + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['  + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize+ ' ['  + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '  + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder  end  end  exec (@strSQL) GO
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章