泉源:网海拾贝
改一下,看看这样是不是更好一点? /* 函数称号: GetRecordFromPage 函数遵从: 获取指定页的数据 参数阐发: @tblName 包括数据的表名 @fldName 关键字段名 @PageSize 每页记载数 @PageIndex 要获取的页码 @IsCount 能否要获得记载数 @OrderType 排序典范圭表规范规范, 0 - 升序, 1 - 降序 @strWhere 盘查条件 (注重: 不要加 where) */ CREATE PROCEDURE pGO_GetRecordFromPage @tblName varchar(255), -- 表名 @fldName varchar(255), -- 字段名 @PageSize int = 10, -- 页尺寸 @PageIndex int = 1, -- 页码 @IsCount bit = 0, -- 前去记载总数, 非 0 值则前去 @OrderType bit = 0, -- 设置排序典范圭表规范规范, 非 0 值则降序 @strWhere varchar(1000) = '' -- 盘查条件 (注重: 不要加 where) AS declare @strSQL varchar(6000) -- 主语句 declare @strTmp varchar(500) -- 临时变量 declare @strOrder varchar(400) -- 排序典范圭表规范规范 -- 如果是盘查记载总数,直接利用Count(0)函数 if @IsCount != 0 begin if @strWhere != '' set @strSQL = 'select count(*) as Total from [' @tblName '] where ' @strWhere else set @strSQL = 'select count(*) as Total from [' @tblName '] ' end --如果是想盘查记载,则 else begin if @PageIndex = 1 begin set @strTmp = '' if @strWhere != '' set @strTmp = ' where ' @strWhere set @strSQL = 'select top ' str(@PageSize) ' * from [' @tblName ']' @strTmp ' ' @strOrder end else begin --如果是降序盘查…… if @OrderType != 0 begin set @strTmp = '<(select min' set @strOrder = ' order by [' @fldName '] desc' end --如果是升序盘查…… else begin set @strTmp = '>(select max' set @strOrder = ' order by [' @fldName '] asc' end if @strWhere != '' set @strSQL = 'select top ' str(@PageSize) ' * from [' @tblName '] where [' @fldName ']' @strTmp '([' @fldName ']) from (select top ' str((@PageIndex-1)*@PageSize) ' [' @fldName '] from [' @tblName '] where ' @strWhere ' ' @strOrder ') as tblTmp) and ' @strWhere ' ' @strOrder else set @strSQL = 'select top ' str(@PageSize) ' * from [' @tblName '] where [' @fldName ']' @strTmp '([' @fldName ']) from (select top ' str((@PageIndex-1)*@PageSize) ' [' @fldName '] from [' @tblName ']' @strOrder ') as tblTmp)' @strOrder end end exec (@strSQL) GO 版权声明: 原创作品,容许转载,转载时请务必以超链接办法标明文章 原始出处 、作者信息和本声明。否则将穷究轨则责任。