CREATE PROCEDURE p_GetStudentInfo @strWhere varchar(1500) -- 查询条件 (注意: 不要加 where) ,@PageSize int = 50 -- 页尺寸 ,@PageIndex int = 1 -- 页码 AS BEGIN declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 set @strTmp = '<(select min' set @strOrder = ' order by studentinfoid desc' if @PageIndex = 1 begin if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' * from studentinfo where ' + @strWhere + ' ' + @strOrder else set @strSQL = 'select top ' + str(@PageSize) +' * from studentinfo '+ @strOrder --如果是第一页就执行以上代码,这样会加快执行速度 end else begin --以下代码赋予了@strSQL以真正执行的SQL代码 set @strSQL = 'select top ' + str(@PageSize) +' * from studentinfo where studentinfoid' + @strTmp + '(studentinfoid) from (select top ' + str((@PageIndex-1)*@PageSize) + ' studentinfoid from studentinfo' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != '' set @strSQL = 'select top ' + str(@PageSize) +' * from studentinfo where studentinfoid' + @strTmp + '(studentinfoid) from (select top ' + str((@PageIndex-1)*@PageSize) + ' studentinfoid from studentinfo where ' + @strWhere + ' ' + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder end --print (@strSQL) exec (@strSQL) END GO |
CREATE PROCEDURE p_GetStudentInfo @PageSize INT, @PageIndex INT, @strWhere varchar(1500) -- 查询条件(注意: 不要加where) As Begin select * from ( select row_number() over (order by StudentInfoId) row,* from StudentInfo ) StudentInfo where row between @PageSize*(@PageIndex-1) and @PageSize*@PageIndex End go |
Exec p_GetStudentInfo @PageSize = 10000, @PageIndex = 10, @strWhere = '1=1' |
欢迎光临 MariaDB社区 (http://123.56.88.72/) | Powered by Discuz! X3.2 |