骑牛上北京

 

mssql分页存储过程

本文转自百度文库http://wenku.baidu.com/view/8f6ec149fe4733687e21aa72.html

必须有主键

原代码

Code

 简单改造,调整了参数的顺序,重新进行了命名,以符合的我的使用习惯

 1 if exists(select name from sysobjects where name='pages' and xtype='p')
 2 drop proc pages
 3 go
 4 
 5 CREATE PROC pages
 6 @bit_DoCount BIT   ,         -- 返回记录总数, 0不返回,1返回
 7 @str_tblName varchar(255),      -- 表名
 8 @str_SelectFields varchar(1000),  -- 需要返回的列(所有字段*)
 9 @str_Where varchar(1500),          -- 查询条件 (注意: 不要加 where)
10 @str_PkField varchar(255),        --主键名称(决定着取出来的记录)
11 @bit_OrderType bit,               -- 设置排序类型, 0升序,1降序
12 @int_PageSize int,                  -- 多少条/页
13 @int_PageIndex int                 -- 页码
14 AS
15 
16 declare @strSQL varchar(5000)     --主语句
17 declare @strTmp varchar(150)      --临时变量
18 declare @strOrder varchar(400)    --排序类型
19 
20 --如果@doCount传递过来的不是0,就执行总数统计。
21 if @bit_DoCount != 0
22     begin
23         --查询条件为空
24         set @strSQL = 'select count(*) as Total from ' + @str_tblName
25         --查询条件不为空
26         if @str_Where !=''
27             set @strSQL = 'select count(*) as Total from ' + @str_tblName + ' where '+@str_Where
28     end 
29 
30 --以下的所有代码都是@doCount为0的情况:
31 --如果@OrderType是1,就执行降序,否则为升序!
32 else
33     begin
34         --查询条件为空
35         set @strTmp = '>(select max'
36         set @strOrder = ' order by ' + @str_PkField +' asc'
37         --查询条件不为空
38         if @bit_OrderType = 1
39             begin
40                 set @strTmp = '<(select min'
41                 set @strOrder = ' order by ' + @str_PkField +' desc'
42             end
43 
44         --如果是第一页就执行代码,这样会加快执行速度
45         if @int_PageIndex = 1
46             begin
47                 --查询条件为空
48                 set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' '+@strOrder
49                 --如果查询条件不为空,
50                 if @str_Where != '' 
51                     set @strSQL='select top '+str(@int_PageSize)+' '+@str_SelectFields+' from '+@str_tblName+' where '+@str_Where+' '+@strOrder
52             end
53         --如果不是第一页,则
54         else
55             begin
56             --以下代码赋予了@strSQL以真正执行的SQL代码
57 
58                 --sql查询语句
59                 set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
60                         + @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
61                         + @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
62                         + @str_PkField + ' from ' + @str_tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
63 
64 
65                 --如果查询条件不为空,则另写sql语句
66                 if @str_Where != ''
67                     set @strSQL = 'select top ' + str(@int_PageSize) +' '+@str_SelectFields+ ' from '
68                             + @str_tblName + ' where ' + @str_PkField + '' + @strTmp + '('
69                             + @str_PkField + ') from (select top ' + str((@int_PageIndex-1)*@int_PageSize) + ' '
70                             + @str_PkField + ' from ' + @str_tblName + ' where ' + @str_Where + ' '
71                             + @strOrder + ') as tblTmp) and ' + @str_Where + ' ' + @strOrder
72             end 
73     end 
74     PRINT @strSQL 
75 exec (@strSQL)
76 GO
View Code

 

posted on 2013-10-07 13:19  29882942  阅读(128)  评论(0编辑  收藏  举报

导航