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

相关文章
|
7月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
631 93
|
6月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
343 0
|
9月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
7月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
492 8
|
9月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
438 11
|
9月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
9月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
695 0
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
存储 关系型数据库 MySQL
【YashanDB知识库】MySQL返回结果集的存储过程的改写方法
本文介绍了将MySQL存储过程改写至YashanDB的解决方案。由于MySQL存储过程可直接返回结果集,而YashanDB需通过返回SYS_REF_CURSOR的函数实现类似功能,因此需要对代码进行转换。示例中展示了如何将MySQL存储过程`proc1`改写为YashanDB函数,并调整JDBC应用代码以适配REF_CURSOR输出参数,从而正确获取查询结果。此方法确保了跨数据库场景下的兼容性与功能性。
|
存储 SQL NoSQL

推荐镜像

更多
下一篇
开通oss服务