Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)delv
published in(发表于) 2013/12/30 4:33:33
mssql用存储过程实现分页功能_mssql学习_编程技术

mssql用存储过程实现分页功能_mssql学习_编程技术-你的首页-uuhomepage.com
sql server用存储过程实现分页功能的实现代码:
if exists (select name from sysobjects where name ='sp_page')
drop proc sp_page
go
create proc sp_page
@strTable varchar(50), --表名
@strColumn varchar(50), --按该列来进行分页
@intColType int, --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型
@intOrder bit, --排序,0-顺序,1-倒序
@strColumnlist varchar(800), --要查询出的字段列表,*表示全部字段
@intPageSize int, --每页记录数
@intPageNum int, --指定页
@strWhere varchar(800), --查询条件
@intPageCount int output --总页数
as
declare @sql nvarchar(4000) --用于构造SQL语句
declare @where1 varchar(800) --构造条件语句
declare @where2 varchar(800) --构造条件语句
if @strWhere is null or rtrim(@strWhere)=''
-- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格
begin --没有查询条件
set @where1=' where '
set @where2=' '
end
else
begin --有查询条件
set @where1=' where ('+@strWhere+') and '
set @where2=' where ('+@strWhere+') '
end
set @strColumn = ' ' + @strColumn + ' '
set @strColumnlist = ' ' + @strColumnlist + ' '
--构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 )
set @sql='select @intPageCount=ceiling((count(*)+0.0)/'
+ cast(@intPageSize as varchar)
+ ') from ' + @strTable + @where2
--执行SQL语句,计算总页数,并将其放入@intPageCount变量中
exec sp_executesql @sql,N'@intPageCount int output',@intPageCount output
--将总页数放到查询返回记录集的第一个字段前,此语句可省略
--set @strColumnlist = cast(@intPageCount as varchar(30)) + ' as PageCount,' + @strColumnlist
if @intOrder=0 --构造升序的SQL
set @sql='select top '+ cast(@intPageSize as varchar) +
@strColumnlist +
' from ' + @strTable + @where1 +
@strColumn + '>(select max('+@strColumn+') '+
' from (select top '+ cast(@intPageSize*(@intPageNum - 1) as varchar) +
@strColumn + ' from '+ @strTable+@where2+'order by '+@strColumn+') t) order by '+ @strColumn
else --构造降序的SQL
set @sql='select top '+ cast(@intPageSize as varchar) +
@strColumnlist+
' from '+ @strTable + @where1 +
@strColumn + '<(select min('+@strColumn+') '+
' from (select top '+ cast(@intPageSize*(@intPageNum - 1) as varchar) +
@strColumn + ' from '+ @strTable+@where2+'order by '+@strColumn+' desc) t) order by '+
@strColumn + ' desc'
if @intPageNum=1 --第一页
set @sql='select top '+cast(@intPageSize as varchar) + @strColumnlist + ' from '+@strTable+
@where2+'order by ' + @strColumn + case @intOrder when 0 then '' else ' desc'
end
--PRINT @sql
exec(@sql)
go
declare @intPageCount int
exec sp_page 'Alarm1','Id',0,0,'*',20,1,'',@intPageCount output
drop proc sp_page





If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759