USE [数据库名] GO /****** Object: StoredProcedure 存储过程名 GetPageData Script Date: 02/18/2011 08:50:35 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author:cjh200102 -- Create date: 2011-2-18 -- Description: 分页 -- ============================================= ALTER PROCEDURE [dbo].[GetPageData] ( @tblName varchar(255), -- 表名 @strGetFields varchar(1000), -- 需要返回的列 @fldName varchar(255), -- 排序的字段名 @PageSize int , -- 页尺寸 @PageIndex int , -- 页码 @strWhere varchar(1500), -- 查询条件(注意: 不要加where) @Sort varchar(255) --排序的方法 ) AS declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @Sort = 'desc' begin set @strTmp = '<(select min' set @strOrder = ' order by ' + @fldName +' desc' --如果@OrderType不是,就执行降序,这句很重要! end else begin set @strTmp = '>(select max' set @strOrder = ' order by ' + @fldName +' asc' end if @PageIndex = 1 begin if @strWhere != '' begin set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder end else begin set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder end --如果是第一页就执行以上代码,这样会加快执行速度 end else begin if @strWhere != '' begin set @strSQL ='SELECT TOP ' + str(@PageSize) +' '+@strGetFields+ ' FROM ' + @tblName + ' WHERE (ID NOT IN(SELECT TOP '+ str(@PageSize*(@PageIndex-1))+ ' id FROM ' + @tblName + ' ' + ' where ' + @strWhere + ' ' + @strOrder+')) and '+ @strWhere + ' ' + @strOrder --print @strSQL end else begin set @strSQL ='SELECT TOP ' + str(@PageSize) +' '+@strGetFields+ ' FROM ' + @tblName + ' WHERE (ID NOT IN(SELECT TOP '+ str(@PageSize*(@PageIndex-1))+ ' id FROM ' + @tblName + ' ' + @strOrder+'))' + ' ' + @strOrder --print @strSQL end --如果不是第一页就执行以上代码 end exec(@strSql) return --测试调用语句 --exec GetPageData '表名','字段1,字段2,字段3,字段4,字段5','排序字段',每页显示多少条,第几页,查询条件,排序的方法
