SQLServer分页查询

今天心血来潮,想去了解一下SQLServer分页的写法(毕竟很久没用它了),然后到网上去查了有关这方面的相关知识。功夫不负有心人,最终在CSDN上看到了一篇讲述关于SQLServer分页查询的文章,感觉还不错,然后就寻思着把它给记下来,以便以后用的时候做参考。下面就是一个通用的分页查询存储过程。

 1 /***----------------------------------------------
 2  *procedure name : prcPageResult
 3  *  author : FuChun
 4  *  create date : 2006-10-04
 5  */
 6 CREATE PROCEDURE prcPageResult
 7 -- 获得某一页的数据 --
 8 @currPage int = 1,                                    --当前页页码 (即Top currPage)
 9 @showColumn varchar(2000) = '*',           --需要得到的字段 (即 column1,column2,......)
10 @tabName varchar(2000),                           --需要查看的表名 (即 from table_name)
11 @strCondition varchar(2000) = '',              --查询条件 (即 where condition......) 不用加where关键字
12 @ascColumn varchar(100) = '',                 --排序的字段名 (即 order by column asc/desc)
13 @bitOrderType bit = 0,                            --排序的类型 (0为升序,1为降序)
14 @pkColumn varchar(50) = '',                   --主键名称
15 @pageSize int = 20                                --分页大小
16 
17 AS
18 BEGIN -- 存储过程开始
19 -- 该存储过程需要用到的几个变量 --
20 DECLARE @strTemp varchar(1000)
21 DECLARE @strSql varchar(4000)                   --该存储过程最后执行的语句
22 DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc)
23 
24 BEGIN
25 IF @bitOrderType = 1   -- bitOrderType=1即执行降序
26 BEGIN
27     SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC'
28     SET @strTemp = '<(SELECT min'
29 END
30 ELSE
31 BEGIN
32     SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC'
33     SET @strTemp = '>(SELECT max'
34 END
35 
36 IF @currPage = 1    -- 如果是第一页
37 BEGIN
38     IF @strCondition != ''
39         SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
40             ' WHERE '+@strCondition+@strOrderType
41     ELSE
42         SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+@strOrderType
43 END
44 
45 ELSE    -- 其他页
46 BEGIN
47     IF @strCondition !=''
48         SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
49         ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+
50         ' '+@pkColumn+' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
51     ELSE
52         SET @strSql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM '+@tabName+
53         ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+
54         ' FROM '+@tabName+@strOrderType+') AS TabTemp)'+@strOrderType
55 END
56 
57 END
58 EXEC (@strSql)
59 END  -- 存储过程结束
60 ------------------------------------------------
61 GO

该存储过程功能比较强大,尤其是在处理大数据时,效果很明显。

posted @ 2013-05-21 11:48  Thinker_cxz  阅读(249)  评论(0编辑  收藏  举报