CYQ.Data 数据层框架

CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。

CYQ.Data 数据框架 SQL2000 分页存储过程

框架原理 | | | 发表日期 :2011/5/18 1:47:54#楼主  

第二版已出,见:http://cyqdata.com/cyqdata/article-detail-42462

        最近有使用SQL2000的网友在分页上出了点问题,经过重重排查,竟然是由于分页里的注释代码引起的,所以,使用此分页存储过程的网友注意一下,如果有问题,请把注释删除。

下面是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



新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

发表评论

论坛公告

    数据框架 CYQ.Data QQ群:6033006
    使用本框架进行开发,入门简单,开发效率高,性能优越,更有详尽的API文档,有相关的使用帮助文章、示例文章、更甚有相关的视频教程及辅助工具。 关键还是免费与开源,实在是居家旅行、项目开发、学习研究的必备良品!!!!!!


    在线帮助:欢迎联系

帖子搜索