博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
阅读量:4952 次
发布时间:2019-06-12

本文共 3194 字,大约阅读时间需要 10 分钟。

 

在 分页是内部集成的功能,针对不同的数据库,使用不同的分页形式。

 

1:Access   :集成:使用3次Top分页
2:MySql    :集成,使用Limit N分页
3:Sqlite    :集成,使用Limit N分页
4:Sql2000:外置存储过程,使用临时表方式分页
5:Sql2005:外置存储过程,使用ROW_NUMBER方式分页
6:Oracle   :外置存储过程,使用RowNum 方式分页

 

 

下面是三种不同存储过程代码:

 

 1:数据框架在  的  的代码:

 

create  procedure SelectBase

           @PageIndex         int,
           @PageSize      int,
           @TableName    nvarchar(4000),
           @Where     nvarchar(2000)=''
           as
           Declare @rowcount    int
           Declare @intStart    int
           Declare @intEnd         int
           declare @Column1 varchar(32) --第一列名称
           Declare @Sql nvarchar(2000), @WhereR nvarchar(1000), @OrderBy nvarchar(1000)
           set @rowcount=0
           set nocount on
           if @Where<>''
           begin
           set @Where=' and
           end
           if CHARINDEX('order by', @Where)>0
           begin
           set @WhereR=substring(@Where, 1, CHARINDEX('order by',@Where)-1) --取得条件
           set @OrderBy=substring(@Where, CHARINDEX('order by',@Where), Len(@Where)) --取得排序方式(order by 字段 方式)
           end
           else
           begin
           set @WhereR=@Where
           set @OrderBy=' order by id asc'
           end
           set @Sql='SELECT @rowcount=count(*) from '+cast(@TableName as varchar(4000))+' where 1=1

           exec sp_executeSql @Sql,N'@rowcount int output',@rowcount output

           if @PageIndex=0 and @PageSize=0 --不进行分页,查询所有数据列表
           begin
           set @Sql='SELECT * from '+cast(@TableName as varchar(4000))+' where 1=1
           end
           else --进行分页查询数据列表
           begin
           set @intStart=(@PageIndex-1)*@PageSize+1;
           set @intEnd=@intStart+@PageSize-1
           set @Column1=col_name(object_id(@tableName),1) --设置第一列名称
           if @Column1 is null begin set @Column1='ID' end --设置默认为ID列
           set @Sql='Create table #tem(tempID int identity(1,1) not null,Row int) ' 
           set @Sql=@Sql+'insert #tem(Row) select from where 1=1  
           set @Sql=@Sql+' select * from left join #tem  on ' 
           set @Sql=@Sql+' where  #tem.tempID between '+cast(@intStart as varchar)+' and '+cast(@intEnd as varchar)
           end
           exec sp_executeSql @Sql
           return @rowcount
           set nocount off 
GO

 

Tip:

最近有使用  的网友在分页上出了点问题,经过重重排查,竟然是由于分页里的注释代码引起的。

所以,使用此分页存储过程的网友注意一下,如果有问题,请把注释删除。

 

 

 

2:数据框架在  的  的代码:

Create procedure [SelectBase]
@PageIndex         int,
@PageSize      int,
@TableName    nvarchar(4000),
@Where     nvarchar(max)=''
as
Declare @rowcount    int
Declare @intStart    int
Declare @intEnd         int
Declare @SQl nvarchar(max), @WhereR nvarchar(max), @OrderBy nvarchar(max)
set @rowcount=0
set nocount on
if @Where<>''
begin
set @Where=' and
end
if CHARINDEX('order by', @Where)>0
begin
set @WhereR=substring(@Where, 1, CHARINDEX('order by',@Where)-1) --取得条件
set @OrderBy=substring(@Where, CHARINDEX('order by',@Where), Len(@Where)) --取得排序方式(order by 字段 方式)
end
else
begin
set @WhereR=@Where
set @OrderBy=' order by id asc'
end
set @SQl='SELECT @rowcount=count(*) from '+cast(@TableName as varchar(4000))+' where 1=1
exec sp_executeSql @SQl,N'@rowcount int output',@rowcount output
if @PageIndex=0 and @PageSize=0 --不进行分页,查询所有数据列表
begin
set @SQl='SELECT * from '+cast(@TableName as varchar(4000))+' where 1=1
end
else --进行分页查询数据列表
begin
set @intStart=(@PageIndex-1)*@PageSize+1;
set @intEnd=@intStart+@PageSize-1
set @SQl='select * from(select *,ROW_NUMBER() OVER('+cast(@OrderBy as nvarchar(400))+') as row from '
set @SQl=@SQL+@TableName+' where 1=1
) as a where row between '+cast(@intStart as varchar)+' and '+cast(@intEnd as varchar)
end
exec sp_executeSql @SQl
return @rowcount
set nocount off

 

3:Oracle 的分页存储过程代码

这里就不贴了,见帖子:

 

 

转载于:https://www.cnblogs.com/cyq1162/archive/2011/05/18/2050283.html

你可能感兴趣的文章
apache 实现图标缓存客户端
查看>>
MediaWiki左侧导航栏通过特殊页面就可以设置。
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>
MongoDB的简单使用
查看>>
hdfs 命令使用
查看>>
prometheus配置
查看>>
定宽320 缩放适配手机屏幕
查看>>
BZOJ 2120 数颜色 【带修改莫队】
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
Codeforces 40 E. Number Table
查看>>
CLR via C#(第3 版)
查看>>
java语法之final
查看>>
关于响应式布局
查看>>
详解ASP.Net 4中的aspnet_regsql.exe
查看>>
python 多进程和多线程的区别
查看>>
hdu1398
查看>>