CYQ.Data 数据层框架

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

CYQ.Data 数据框架 SQL2000 分页存储过程 [第二版]

框架原理 | | | 发表日期 :2011/8/3 8:45:15#楼主  

        本版本的SQL2000分页存储过程相对上一版本,在细节处理上优化了一下,同时将原有仅针对int型的分页,处理兼容了字符串类型。

下面是CYQ.Data 数据框架在SQL2000的第二版本的分页存储过程的代码:

PS:如果使用上出现莫名其妙的错误,请将注释删除再看看情况。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

Create procedure [dbo].[SelectBase]
@PageIndex         int,
@PageSize      int,
@TableName    nvarchar(4000),
@Where     nvarchar(2000)=''
as
Declare @rowcount    int

Declare @Sql nvarchar(2000), @WhereOnly nvarchar(1000),@OrderbyColumn varchar(64)
set @rowcount=0
set nocount on

if @Where<>''
   begin
  set @Where=' where '+@where
  if CHARINDEX('order by', @Where)>0
     begin
      set @rowcount=CHARINDEX('order by',@Where) --借用@rowcount变量
      set @WhereOnly=substring(@Where, 1, @rowcount-1) --取得条件
      set @OrderbyColumn=RTRIM(LTRIM(substring(@Where,@rowcount+9,64))) --去掉两边的空格
      set @rowcount=CHARINDEX(' ',@OrderbyColumn) --借用@rowcount变量
     if @rowcount>0
    begin
         if CHARINDEX('+',@OrderbyColumn)=0 --组合排序检测
         begin
         set @OrderbyColumn=substring(@OrderbyColumn,1,@rowcount-1)
         end
         else set @OrderbyColumn=''    end
     end
     else
     begin
      set @WhereOnly=@Where
     end
     end
 else
 begin
  set @WhereOnly=''
 end


set @Sql='SELECT @rowcount=count(*) from '+cast(@TableName as varchar(4000))+@WhereOnly

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
   end
   else --进行分页查询数据列表
   begin
  Declare @intStart int
  Declare @intEnd   int
  declare @Column1 varchar(64) --第一列名称

   

  if CHARINDEX('(', @tableName)>0 --视图SQL语句
  begin
   
   set @Tablename=reverse(@TableName)
   set @TableName=reverse(substring(@Tablename,charindex(')',@Tablename),4000))+' t '

   if @OrderbyColumn<>''  begin set @Column1=@OrderbyColumn end
   else begin set @Column1='ID' end
  end
  else
  begin
   set @Column1=col_name(object_id(@tableName),1) --取第一列名称
   set @TableName=@TableName+' t '
  end

    set @intStart=(@PageIndex-1)*@PageSize+1;
    set @intEnd=@intStart+@PageSize-1

    set @Sql='Create table #tem(tempID int identity(1,1) not null,Row varchar(64)) ' 
    set @Sql=@Sql+'insert #tem(Row) select cast('+@Column1+' as varchar(64)) from '+@TableName+@Where 
    set @Sql=@Sql+' select t.* from #tem left join '+@TableName+' on '+@Column1+'=#tem.Row ' 
    set @Sql=@Sql+' where  #tem.tempID between '+cast(@intStart as varchar)+' and '+cast(@intEnd as varchar)+' order by #tem.tempID asc'
   end
exec sp_executeSql @Sql
return @rowcount
set nocount off


更新时间: 2012-03-13




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

发表评论

论坛公告

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


    在线帮助:欢迎联系

帖子搜索