当前位置: 首页 > 工具软件 > CYQ.Data > 使用案例 >

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

寇和璧
2023-12-01

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

1:Access:集成:使用3次Top分页

2:MySql:集成,使用LimitN分页

3:Sqlite:集成,使用LimitN分页

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问题小菜记[分页存储过程/查询所有表、视图、存储过程/查询表、视图、存储过程字段结构与参数](三)

 类似资料: