分頁儲存過程(排序)

 
------------------------------------
--用途:支持任意排序的分頁存儲過程 
--說明:
------------------------------------

CREATE PROCEDURE UP_GetRecordByPageOrder
 
 @tblName varchar(255),   -- 表名
 @fldName varchar(255),   -- 顯示字段名
 @OrderfldName varchar(255),  -- 排序字段名
 @StatfldName varchar(255),  -- 統計字段名
 @PageSize int = 10,   -- 頁尺寸
 @PageIndex int = 1,   -- 頁碼
 @IsReCount bit = 0,   -- 返回記錄總數, 非 0 值則返回
 @OrderType bit = 0,   -- 設置排序類型, 非 0 值則降序
 @strWhere varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where)
AS

 declare @strSQL varchar(6000)  -- 主語句
 declare @strTmp varchar(100)   -- 臨時變量
 declare @strOrder varchar(400)  -- 排序類型

if @OrderType != 0
 begin
  set @strTmp = '<(select min'
  set @strOrder = ' order by [' + @OrderfldName +'] desc'
 end
else
 begin
  set @strTmp = '>(select max'
  set @strOrder = ' order by [' + @OrderfldName +'] asc'
 end

set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
 + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['
 + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
 + @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
 + @strOrder

if @strWhere != ''
 set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
 + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['
 + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
 + @OrderfldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
 + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
 begin
  set @strTmp = ''
  if @strWhere != ''
  set @strTmp = ' where ' + @strWhere

  set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['
  + @tblName + ']' + @strTmp + ' ' + @strOrder
 end


if @IsReCount != 0
 set @strSQL = @strSQL+' select count(1) as Total from [' + @tblName + ']'

if @strWhere!=''
 set @strSQL = @strSQL+' where ' + @strWhere
exec (@strSQL)

 

GO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章