SQL2000分页存储过程

 

 1set ANSI_NULLS ON
 2set QUOTED_IDENTIFIER ON
 3GO
 4
 5/***********************************************
 6名称:Proc_GetPageList
 7功能:分页存储过程
 8创建人:kangaroo
 9日期:2008/7/17
10***********************************************/

11ALTER PROCEDURE [dbo].[Proc_GetPageList]
12(
13    @Tables varchar(1000),          --表名
14    @PK varchar(100),               --主键    
15    @Fields varchar(1000= '*',    --查询的字段
16        @SortField varchar(200= NULL--排序的字段
17        @SortType varchar(10)= 'ASC',   --排序方式
18    @PageIndex int = 1,             --页码索引
19    @PageSize int = 10,            --页码大小
20    @Filter varchar(1000= NULL,   --过滤条件
21        @PageCount int = 1 output,                  ----查询结果分页后的总页数
22    @RecordCounts int = 1 output                ----查询到的记录数
23)
24AS
25SET NOCOUNT ON
26declare @FieldName nvarchar(50)
27declare @SqlSort nvarchar(250)
28declare @SqlCount nvarchar(2000)
29declare @FromTemp nvarchar(1000)
30declare @SqlResult nvarchar(4000)
31declare @PageMinBound int  
32declare @PageMaxBound int 
33--------首先生成排序方法---------
34if @SortType='ASC'  --升序
35    begin
36       if not(@SortField is null)
37      set @SqlSort = ' Order by ' + @SortField
38       else
39      set @SqlSort = ' Order by ' + @PK
40    end
41else            --降序
42    begin
43     if not(@SortField is null)
44      set @SqlSort = ' Order by ' + @SortField + ' DESC'  
45     else
46      set @SqlSort = ' Order by ' + @PK + ' DESC '
47    end
48--------生成查询语句--------
49if @Filter is null or @Filter='' --没有设置显示条件
50     begin
51     set @FromTemp = ' From ' + @Tables
52     end
53else
54     begin
55     set @FromTemp = ' From ' + @Tables + ' where ' + @Filter
56     end
57set @SqlCount= 'select @RecordCounts=Count(' + @PK + ''+@FromTemp
58----取得查询结果总数量-----
59exec sp_executesql @SqlCount,N'@RecordCounts int out ',@RecordCounts out
60
61--取得分页总数
62if @RecordCounts<= @PageSize
63 set @PageCount = 1
64else
65 set @PageCount = (@RecordCounts / @PageSize+ 1
66
67if @PageIndex=1
68begin  --第一页用TOP方法来获取当前页记录
69   set @SqlResult='select top '+str(@PageSize)+' '+@Fields+' '+@FromTemp+' '+@SqlSort
70end
71
72else
73begin --用临时表获取当前页计录
74    set @PageMinBound=(@Pageindex-1)*@Pagesize
75    set @PageMaxBound=@PageMinBound+@Pagesize
76    create table #Pageindex (id int identity(1,1not null,nid int)
77    set rowcount @PageMaxBound
78    set @SqlResult='insert into #Pageindex(nid) select '+@PK+' '+@FromTemp+' '+@SqlSort
79    set @SqlResult=@SqlResult+'   select '+@Fields+' from '+@Tables+'  a,#Pageindex p
80     where   a.'+@PK+'=p.nid and p.id>'+str(@PageMinBound)+' and p.id<='+str(@PageMaxBound)
81
82end
83print @SqlResult
84exec sp_executesql @SqlResult
85
86
87
posted @ 2006-06-02 16:25  Kangaroo  阅读(606)  评论(1编辑  收藏  举报