SQL2000分页存储过程

 

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

11 ALTER   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 )
24 AS
25 SET  NOCOUNT  ON
26 declare   @FieldName   nvarchar ( 50 )
27 declare   @SqlSort   nvarchar ( 250 )
28 declare   @SqlCount   nvarchar ( 2000 )
29 declare   @FromTemp   nvarchar ( 1000 )
30 declare   @SqlResult   nvarchar ( 4000 )
31 declare   @PageMinBound   int   
32 declare   @PageMaxBound   int  
33 -- ------首先生成排序方法---------
34 if   @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
41 else              -- 降序
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 -- ------生成查询语句--------
49 if   @Filter   is   null   or   @Filter = ''   -- 没有设置显示条件
50       begin
51       set   @FromTemp   =   '  From  '   +   @Tables
52       end
53 else
54       begin
55       set   @FromTemp   =   '  From  '   +   @Tables   +   '  where  '   +   @Filter
56       end
57 set   @SqlCount =   ' select @RecordCounts=Count( '   +   @PK   +   ' ' + @FromTemp
58 -- --取得查询结果总数量-----
59 exec  sp_executesql  @SqlCount ,N ' @RecordCounts int out  ' , @RecordCounts  out
60
61 -- 取得分页总数
62 if   @RecordCounts <=   @PageSize
63   set   @PageCount   =   1
64 else
65   set   @PageCount   =  ( @RecordCounts   /   @PageSize +   1
66
67 if   @PageIndex = 1
68 begin    -- 第一页用TOP方法来获取当前页记录
69     set   @SqlResult = ' select top  ' + str ( @PageSize ) + '   ' + @Fields + '   ' + @FromTemp + '   ' + @SqlSort
70 end
71
72 else
73 begin   -- 用临时表获取当前页计录
74      set   @PageMinBound = ( @Pageindex - 1 ) * @Pagesize
75      set   @PageMaxBound = @PageMinBound + @Pagesize
76      create   table  #Pageindex (id  int   identity ( 1 , 1 not   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
82 end
83 print   @SqlResult
84 exec  sp_executesql  @SqlResult
85
86
87

你可能感兴趣的:(sql2000)