成熟sql 分页存储过程(UP_General_GetPage)

本文详细介绍了通用分页存储过程的功能、参数及其工作原理,包括如何按不同列和页尺寸对数据进行分页,以及排序类型和查询条件的应用。
ContractedBlock.gifExpandedBlockStart.gifView Code
  2 GO
3 /****** Object: StoredProcedure [dbo].[UP_General_GetPage] Script Date: 03/17/2011 11:16:59 ******/
4 SET ANSI_NULLS OFF
5 GO
6 SET QUOTED_IDENTIFIER OFF
7 GO
8
9
10 -- =============================================
11 -- 主 题:通用分页存储过程
12 -- 功 能:对数据按照 不同的列,不同页尺寸分页
13 -- 编 写:王政
14 -- 最后修改:2008-12-5
15 -- 参数:
16 -- @tblName nvarchar(255), -- 表名
17 -- @strGetFields nvarchar(1000) = '*', -- 需要返回的列
18 -- @fldName nvarchar(255)='', -- 排序的字段名
19 -- @PageSize int = 10, -- 页尺寸(每页记录数)
20 -- @PageIndex int = 1, -- 页码
21 -- @OrderType bit = 0, -- 设置排序类型, 非0值则降序
22 -- @strWhere nvarchar(1500) = '', -- 前缀 and 的 查询条件 (注意: 不要加 where)
23 -- @RowCount int output -- 返回记录总数
24 -- =============================================
25 ALTER PROCEDURE [dbo].[UP_General_GetPage]
26 @tblName nvarchar(255), -- 表名
27 @strGetFields nvarchar(1000) = '*', -- 需要返回的列
28 @fldName nvarchar(255)='ID', -- 排序的字段名
29 @PageSize int = 10, -- 页尺寸(每页记录数)
30 @PageIndex int = 1, -- 页码
31 @OrderType bit = 0, -- 设置排序类型, 非0值则降序
32 @strWhere nvarchar(1500) = '', -- 前缀 and 的 查询条件 (注意: 不要加 where)
33 @RowCount int output -- 返回记录总数
34 AS
35 SET ANSI_WARNINGS ON
36 declare @strSQL nvarchar(4000) -- 主语句
37 declare @strTmp nvarchar(110) -- 临时变量
38 declare @strOrder nvarchar(400) -- 排序类型
39 set @strSQL = 'select @RowCount=ISNULL(count(*),0) from ' + @tblName + ' where 1=1 '+@strWhere
40 exec sp_executesql @strSQL,N'@RowCount int output',@RowCount out
41
42 IF @RowCount=0
43 BEGIN
44 RETURN
45 END
46 --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
47 set @strSQL =''
48 if @OrderType!= 0 -- 降序(desc)
49 begin
50 set @strTmp = '<(select min'
51 set @strOrder = ' order by ' + @fldName +' desc'
52 --如果@OrderType不是0,就执行降序,这句很重要!
53 end
54 else -- 升序(asc)
55 begin
56 set @strTmp = '>(select max'
57 set @strOrder = ' order by ' + @fldName +' asc'
58 end
59 if @PageIndex = 1 --// 页码
60 begin
61 set @strSQL = 'select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' + @tblName + ' where 1=1 ' + @strWhere + ' ' + @strOrder
62 --如果是第一页就执行以上代码,这样会加快执行速度
63 end
64 else
65 begin --以下代码赋予了@strSQL以真正执行的SQL代码
66 set @strSQL ='select top ' +str(@PageSize)+ ' ' +@strGetFields+ ' from ' +@tblName+ ' where ' +@fldName+ ' ' +@strTmp+ '( ' +@fldName+ ' ) from (select top ' +str((@PageIndex-1)*@PageSize) + ' ' +@fldName+ ' from ' +@tblName+ ' where 1=1 ' +@strWhere+ ' ' +@strOrder+ ') as tblTmp) ' +@strWhere+ ' ' +@strOrder
67 end
68 --print @strSQL
69 exec (@strSQL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值