CYQ.Data 数据框架 数据库分页格局及储存进程[SQL2000/SQL2005/Oracle]

 

CYQ.Data
分页是内部集成的功效,针对差距的数据库,使用不相同的分页情势。

 

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

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

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

4:Sql2000:外置存储进程,使用临时表格局分页

5:Sql2005:外置存储进度,使用ROW_NUMBE汉兰达情势分页

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 @WhereTiguan=substring(@Where, 1, CHA奇骏INDEX(‘order
by’,@Where)-1) –取得条件
           set @OrderBy=substring(@Where, CHAEscortINDEX(‘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 @WhereWrangler=substring(@Where, 1, CHA中华VINDEX(‘order
by’,@Where)-1) –取得条件
set @OrderBy=substring(@Where, CHACRUISERINDEX(‘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难点小菜记[分页存储进程/查询所有表、视图、存储进度/查询表、视图、存储进程字段结构与参数](三)

 

 

相关文章