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

相关文章
|
4天前
|
SQL 数据采集 自然语言处理
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
|
2月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
44 0
|
2天前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
12 5
|
2月前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
30 1
|
2月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
2月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
84 0
|
2月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
25 0
|
2月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
32 0
|
2月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多