本文转自百度文库http://wenku.baidu.com/view/8f6ec149fe4733687e21aa72.html
必须有主键
原代码
Code
简单改造,调整了参数的顺序,重新进行了命名,以符合的我的使用习惯
1 if exists(select name from sysobjects where name='pages' and xtype='p')View Code
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