分页存储过程:自己写的
2013-03-25 18:17
471 查看
USE [Northwind]
GO
/****** Object: StoredProcedure [dbo].[Sp_Pager] Script Date: 03/25/2013 17:54:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Sp_Pager]
@table varchar(100),--表名
@where varchar(200),--条件
@order varchar(200),--排序规则
@pagecount int,--每页的数量
@pageindex int,--当前页数
@totalpage int output,--总页数(输出)
@total int output--总人数(输出)
as
--定义全局变量
declare @sql nvarchar(500)
--确定主键
declare @primarykey varchar(100)=''
select @primarykey=name from sysobjects where parent_obj in(select id from sysobjects where name=@table) and xtype='PK'
--确定总人数
if @order !=NULL or @order !=''
begin
set @sql='select count(*) from '+@table+' '+@where+' order by '+@order
exec sp_executesql @sql,@total output
end
else
begin
set @sql='select count(*) from '+@table+' '+@where +' order by '+@primarykey
exec sp_executesql @sql,@total output
end
--确定总页数
set @totalpage=CEILING(@total/@pagecount)
--判断总页数与index的大小
if @order !=NULL or @order !=''
begin
if @pageindex=@totalpage
begin
set @sql=''
set @sql='select * from ('+'select * from '+@table+' '+@where+' order by '+@order +') where @primarykey not in ('+
'select top '+(@totalpage-1)*@pagecount+' '+@primarykey+' from '+@table+' '+@where+' order by '+@order +')'
exec sp_executesql @sql
end
else
begin
set @sql=''
set @sql='select * from ('+
'select top '+@pagecount+' * from(select top '+@pageindex*@pagecount+' * from '+@table+' order by '+@order+') a order by '+@primarykey+' DESC
) b order by '+@primarykey+' ASC'
end
end
else
begin
if @pageindex =@totalpage
begin
set @sql=''
set @sql='select * from ('+'select * from '+@table+' '+@where +' order by '+@primarykey +') where @primarykey not in ('+
'select top '+(@totalpage-1)*@pagecount+' '+@primarykey+' from '+@table+' '+@where +' order by '+@primarykey
exec sp_executesql @sql
end
else
begin
set @sql=''
set @sql='select * from ('+
'select top '+@pagecount+' * from(select top '+@pageindex*@pagecount+' * from '+@table+' order by '+@primarykey+'ASC ) a order by '+@primarykey+' DESC
) b order by '+@primarykey+' ASC'
end
end
GO
/****** Object: StoredProcedure [dbo].[Sp_Pager] Script Date: 03/25/2013 17:54:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[Sp_Pager]
@table varchar(100),--表名
@where varchar(200),--条件
@order varchar(200),--排序规则
@pagecount int,--每页的数量
@pageindex int,--当前页数
@totalpage int output,--总页数(输出)
@total int output--总人数(输出)
as
--定义全局变量
declare @sql nvarchar(500)
--确定主键
declare @primarykey varchar(100)=''
select @primarykey=name from sysobjects where parent_obj in(select id from sysobjects where name=@table) and xtype='PK'
--确定总人数
if @order !=NULL or @order !=''
begin
set @sql='select count(*) from '+@table+' '+@where+' order by '+@order
exec sp_executesql @sql,@total output
end
else
begin
set @sql='select count(*) from '+@table+' '+@where +' order by '+@primarykey
exec sp_executesql @sql,@total output
end
--确定总页数
set @totalpage=CEILING(@total/@pagecount)
--判断总页数与index的大小
if @order !=NULL or @order !=''
begin
if @pageindex=@totalpage
begin
set @sql=''
set @sql='select * from ('+'select * from '+@table+' '+@where+' order by '+@order +') where @primarykey not in ('+
'select top '+(@totalpage-1)*@pagecount+' '+@primarykey+' from '+@table+' '+@where+' order by '+@order +')'
exec sp_executesql @sql
end
else
begin
set @sql=''
set @sql='select * from ('+
'select top '+@pagecount+' * from(select top '+@pageindex*@pagecount+' * from '+@table+' order by '+@order+') a order by '+@primarykey+' DESC
) b order by '+@primarykey+' ASC'
end
end
else
begin
if @pageindex =@totalpage
begin
set @sql=''
set @sql='select * from ('+'select * from '+@table+' '+@where +' order by '+@primarykey +') where @primarykey not in ('+
'select top '+(@totalpage-1)*@pagecount+' '+@primarykey+' from '+@table+' '+@where +' order by '+@primarykey
exec sp_executesql @sql
end
else
begin
set @sql=''
set @sql='select * from ('+
'select top '+@pagecount+' * from(select top '+@pageindex*@pagecount+' * from '+@table+' order by '+@primarykey+'ASC ) a order by '+@primarykey+' DESC
) b order by '+@primarykey+' ASC'
end
end
相关文章推荐
- 自己动手写一个通用的分页存储过程(适用于多表查询)
- 自己写的SQL存储过程分页方法
- 自己改写的一个Sql Server 2000的分页存储过程
- 自己写的关于分页的存储过程
- 自己收集比较强大的分页存储过程
- 从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程
- 自己收集比较强大的分页存储过程 推荐
- 自己改造的分页存储过程
- 自己改造的分页存储过程
- 自己写的带分页的存储过程
- 自己总结的分页存储过程,不足之处请大家指点出来,我也努力更正
- 自己收集比较强大的分页存储过程 推荐
- 记录一条自己常用的分页存储过程
- 自己修改一个别人的sql2005通用存储过程分页
- 以前自己写的一个分页的存储过程
- 学习存储过程的时候参看的两个DVBBS的存储过程和两个初步了解后自己写的存储过程(带分页的)
- 自己整理的一些分页存储过程
- 学习存储过程的时候参看的两个DVBBS的存储过程和两个初步了解后自己写的存储过程(带分页的)
- 自己写的基于窗体函数的分页存储过程
- 自己动手写一个通用的分页存储过程(适用于多表查询)