CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
2012-03-09 00:00
495 查看
在 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
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
相关文章推荐
- CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
- CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
- CYQ.Data 数据框架 数据库分页方式及存储过程[SQL2000/SQL2005/Oracle]
- CYQ.Data 轻量数据层之路 框架如何应对数据库变化
- CYQ.Data 轻量数据层之路 框架如何应对数据库变化
- CYQ.Data 轻量数据层之路 框架如何应对数据库变化
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第二部分:适应不同数据库系统的查询)
- CYQ.Data 数据框架 跨平台应用开发
- CYQ.Data 轻量数据层之路 优雅V1.4版本 框架开源
- CYQ.Data 数据框架 跨平台应用开发
- CYQ.Data 数据框架 V3.5 开源版本发布(源码提供下载)
- CYQ.Data 轻量数据层之路 V3.5版本发布-[开启同语句多数据库运行支持]
- CYQ.Data 轻量数据层之路 优雅V1.4版本 框架开源
- 如何优化操作大数据量数据库(几十万以上数据)(三。实现小数据量和海量数据的分页显示存储过程)
- CYQ.Data 数据框架 V3.0 版本 开放源码下载有[CYQ.Blog(秋色园QBlog) 完全开放所有源码]
- CYQ.Data 数据框架 使用篇一 入门指南
- CYQ.Data 数据框架 加快开源速度 发布V1.5.5版本源码
- CYQ.Data 数据框架 V2.0 版本 开放源码 继续开源之路
- Linux 下 oracle 导入数据库—数据泵方式导入dmp文件