分页存储过程代码

来源:互联网 发布:阿里云虚拟机如何使用 编辑:程序博客网 时间:2024/06/07 07:13

/**@curentpage 当前页*@pagesize 每页记录数*@TableName 表名*@key 主键(自动排序)*@where 查询条件1)空为 null2)有查询条件不要带where*@order '0'表示 desc '1'是asc*@pageCount 总页数*/create procedure Page@currentpage int,@pagesize int,@TableName varchar(30),@key varchar(30),@where varchar(50),@order varchar(1),@pageCount int ,@str varchar(450) outputasbegin---------------执行的sql语句------------declare @sql nvarchar(400),@ordreby nvarchar(200)declare @tempsql1 varchar(200),@tempsql2 varchar(200)---------------记录总数-----------------declare @count int---------------临时变量------------------------declare @temp1 int,@temp2 intset @TableName=' '+@TableName+' 'set @key=' '+@key+' 'if @order='0'set @ordreby=' order by '+@key+'desc'elseset @ordreby=' order by '+@keyif @where='null'set @sql='select @count = count(*) from '+ @TableNameelseset @sql='select @count = count(*) from '+ @TableName+' where '+@where------------@count 付值(声明变量@count 在说明是output 内型)---------------------------exec sp_executesql @sql,N'@count int out',@count out------------求总页数------------------------------if (@count%@pagesize)=0set @pagecount=@count/@pagesizeelseset @pagecount=@count/@pagesize+1-----------判断显示当前页是否异常------------------if @currentpage>@pagecountset @currentpage=@pagecountif @currentpage<1set @currentpage=1----------记录数小于页面显示记录数-----------------if(@currentpage=1)beginif @where='null'set @where=' 'elseset @where=' where '+@whereset @sql = 'select top'+ str(@pagesize)+' * from '+@TableName+@where+@ordrebyendelsebegin/**//* ---------------desc----------------------*@temp1表示前面的记录*@temp2表示后面的记录*假设一共77个记录,每次取10个。取67~58(第2页),去掉前面的57(1~57)个和后面的10个(77~66)*/if @order=0beginset @temp1 = @count-@currentpage*@pagesizeif @temp1<0set @temp1=0set @temp2 = (@currentpage - 1)*@pagesizeif @where='null'beginset @tempsql1='select top ' + str(@temp1)+' '+@key+' from ' + @TableName+' order by ' +@keyset @tempsql2='select top ' + str(@temp2)+' '+@key+' from ' + @TableName + @ordrebyendelsebeginset @tempsql1='select top ' + str(@temp1)+' '+@key+' from ' + @TableName+' where '+@where+' order by ' +@keyset @tempsql2='select top ' + str(@temp2)+' '+@key+' from ' + @TableName+' where '+@where+@ordrebyendset @sql=' select top ' + str(@pagesize) + ' * from ' + @TableName + ' where '+@key+ ' not in 'set @sql= @sql+' ( '+ @tempsql1 +' ) and 'set @sql= @sql+@key+ ' not in ( '+@tempsql2 +' ) 'if @where='null'set @sql= @sql+@ordrebyelseset @sql= @sql+' and '+@where+@ordrebyend/**//* ----------------asc---------------------* @temp 表示前面显示的记录总数* 去掉 @temp 在取出 pagesize 个即可*/elsebeginset @temp1=(@currentpage-1)*@pagesizeif @where='null'set @tempsql1='select top '+ str(@temp1)+' '+@key+' from ' + @TableName + @ordrebyelseset @tempsql1='select top '+ str(@temp1)+' '+@key+' from ' + @TableName ++' where '+@where+@ordrebyset @sql=' select top ' + str(@pagesize) + ' * from ' + @TableName + ' where '+@key+ ' not in 'set @sql=@sql+' ( '+@tempsql1+' ) 'if @where='null'set @sql= @sql+@ordrebyelseset @sql= @sql+' and '+@where+@ordrebyend/**//* -------------------------------------*/endset @str=@sql--exec sp_executesql @sqlendGO 


原创粉丝点击