开发者社区> 泡泡浅眠> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]

简介:
+关注继续查看

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

 

复制代码
1:Access   :集成:使用3次Top分页

2:MySql    :集成,使用Limit N分页

3:Sqlite    :集成,使用Limit N分页

4:Sql2000:外置存储过程,使用临时表方式分页

5:Sql2005:外置存储过程,使用ROW_NUMBER方式分页

6:Oracle   :外置存储过程,使用RowNum 方式分页
复制代码

 

 

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

 

 1:CYQ.Data 数据框架在 SQL2000 的 分页存储过程 的代码:

 

复制代码

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 '+@Where 
           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 '+@WhereR

           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 '+@Where 
           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 '+@Column1+' from '+@TableName+' where 1=1 '+@Where  
           set @Sql=@Sql+' select * from '+@TableName+' left join #tem  on '+@Column1+'=#tem.Row '  
           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:

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

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

 

 

 

2:CYQ.Data 数据框架在 SQL2005 的 分页存储过程 的代码:

复制代码
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 
'+@Where 
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 
'+@WhereR 
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 
'+@Where 
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 
'+@WhereR+') 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 的分页存储过程代码

这里就不贴了,见帖子:折腾Oracle问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2011/05/18/2050283.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Oracle 数据库性能优化3日实战(企业培训)
课程名称一: Oracle性能优化及调整 课程时长 1天 课程深度: 高级 上机实验: 10%-30% 授课对象: Oracle开发人员、Oracle数据库管理人员,应用程序开发人员 课程描述: 本课程讲述Oracle数据库物理层规划,系统性能的监控,数据库性能参数调整,统计信息的收集,使用自动化调试工具优化数据库,I/O子系统的配置与设计以及性能优化方法论等。
1894 0
Oracle其它数据库对象
SQL&gt; --视图: 由一个或者多个表组成的逻辑表 SQL&gt; -创建一个视图,包含了10,20的员工信息 SP2-0734: 未知的命令开头 "-创建一个..." - 忽略了剩余的行。 SQL&gt; --创建一个视图,包含了10,20的员工信息 SQL&gt; create or replace emp1020(empno,ename,sal,deptno)   2
1644 0
Oracle数据库性能模型
原文转自:http://www.hellodb.net/2010/06/db-performance-analysis.html 最近一直在思考一个问题:如何为一个数据库建立性能模型?作为一名DBA来说,我们面临的一个巨大挑战是:如何保证数据库的性能可以满足快速变化的应用的需求,如何在数据量和访问量持续增长的情况下,保证应用的响应时间和数据库的负载处在合理的水平下。
1085 0
探索ORACLE之RMAN_07 数据库所有文件全部丢失恢复
探索ORACLE之RMAN_07 数据库所有文件全部丢失恢复 作者:吴伟龙   Name:Prodence Woo QQ:286507175  msn:hapy-wuweilong@hotmail.com            介于Rman恢复的自动性,我们刚才对数据库的全库,单表空间,数据文件控制文件和参数文件都做了备份,这些备份的内容是数据库运行不可缺少的必要元素,通常情况下我们在生产库中只需要备份这些内容即可。
865 0
IIS连接oralce数据库时 提示“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”
最近由WindowsXP换到了Windows2003系统(Windows 7),Oracle也由原来的8i换到了9i。给客户发布了一个web系统,部署在本机IIS上测试的时候出现了“取不到缓存数据”的自定义异常,经过跟踪找到原因,在连接数据库时,出现“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”异常。
990 0
RedHat As 5.5 安装 Oracle 10g数据库
一、安装环境 System : RedHat As 5.5 Oracle Version : Oracle 10g
1328 0
【原】Oracle 数据库实例启动过程
Oracle数据库实例的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载。Oracle数据启动的过程被划分为,几个不同的步骤,在不同的启动过程中,我们可以对其实现不同的操作,系统修复等等工作,因此了解Oracle数据启动、关闭是非常有必要的。
696 0
Oracle限制某个数据库帐号只能在特定机器上连入数据库
通过Oracle数据库的触发器实现,例如:TEST为测试账号、绑定的IP为:10.142.244.
734 0
Oracle数据库自我总结
1.Oracle连接远程服务器,需要安装客户端的同时需要覆盖D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora文件。 如果连接不上,可以重启OracleServiceORCL服务。
1008 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PostgresChina2018_刘成伟_oracle到Postgres数据库迁移工具
立即下载
ORACLE 10g 数据库体系结构图
立即下载
Oracle 至PostgreSQL案例分享
立即下载