sql 2000 分页

 


create PROCEDURE [dbo].[Proc_GetPageList]

(
   @Tables varchar(1000),          --表名
   @PK varchar(100),               --主键   
   @Fields varchar(1000) = '*',    --查询的字段
   @SortField varchar(200) = NULL, --排序的字段
   @SortType varchar(10)= 'ASC',   --排序方式
   @PageIndex int = 1,             --页码索引
   @PageSize int = 10,            --页码大小
   @Filter varchar(1000) = NULL,   --过滤条件
   @PageCount int = 1 output,                  ----查询结果分页后的总页数
   @RecordCounts int = 1 output                ----查询到的记录数

)

AS

SET NOCOUNT ON

declare @FieldName nvarchar(50)

declare @SqlSort nvarchar(250)

declare @SqlCount nvarchar(2000)

declare @FromTemp nvarchar(1000)

declare @SqlResult nvarchar(4000)
declare @PageMinBound int 

declare @PageMaxBound int

--------首先生成排序方法---------

if @SortType='ASC'  --升序
   begin
      if not(@SortField is null)
     set @SqlSort = ' Order by ' + @SortField
      else
     set @SqlSort = ' Order by ' + @PK
   end

else            --降序
   begin
    if not(@SortField is null)
     set @SqlSort = ' Order by ' + @SortField + ' DESC' 
    else
     set @SqlSort = ' Order by ' + @PK + ' DESC '
   end

--------生成查询语句--------

if @Filter is null or @Filter='' --没有设置显示条件
    begin
    set @FromTemp = ' From ' + @Tables
    end

else
    begin
    set @FromTemp = ' From ' + @Tables + ' where ' + @Filter
    end

set @SqlCount= 'select @RecordCounts=Count(' + @PK + ') '+@FromTemp

----取得查询结果总数量-----
exec sp_executesql @SqlCount,N'@RecordCounts int out ',@RecordCounts out

--取得分页总数

if @RecordCounts<= @PageSize
set @PageCount = 1

else
set @PageCount = (@RecordCounts / @PageSize) + 1

if @PageIndex=1

begin  --第一页用TOP方法来获取当前页记录
  set @SqlResult='select top '+str(@PageSize)+' '+@Fields+' '+@FromTemp+' '+@SqlSort

end

else

begin --用临时表获取当前页计录
   set @PageMinBound=(@Pageindex-1)*@Pagesize
   set @PageMaxBound=@PageMinBound+@Pagesize
   create table #Pageindex (id int identity(1,1) not null,nid int)
   set rowcount @PageMaxBound
   set @SqlResult='insert into #Pageindex(nid) select '+@PK+' '+@FromTemp+' '+@SqlSort
   set @SqlResult=@SqlResult+'   select '+@Fields+' from '+@Tables+'  a,#Pageindex p
    where   a.'+@PK+'=p.nid and p.id>'+str(@PageMinBound)+' and p.id<='+str(@PageMaxBound)

end

print @SqlResult
exec sp_executesql @SqlResult

 


GO

posted on 2014-07-16 12:34  Struggling Rookie  阅读(301)  评论(0编辑  收藏  举报