分页存储过程实例剖析心得

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 08:32 点击:

最近修改了个分页存储过程,作为菜鸟,还是从中获益良多,这里就开始今天的分页之旅了。
1.开始还原 下面先看一下原来的分页存储过程。
 
 1 ALTER PROCEDURE [dbo].[sp_Sql_Paging]
 2 (
 3     @SqlDataTable        NVARCHAR(4000),        -- 表名
 4     @PrimaryKey            NVARCHAR(4000),        -- 主键名称
 5     @Fields                NVARCHAR(4000),        -- 要返回的字段
 6     @pageSize            INT,                -- 页尺寸
 7     @pageIndex            INT,                -- 页码
 8     @recordCount        INT    OUTPUT,            -- 记录总数
 9     @strOrderBy            NVARCHAR(4000),        -- 排序
10     @strWhere            NVARCHAR(4000)        -- 查询条件
11 )
12 AS
13 BEGIN
14     SET NOCOUNT ON
15     DECLARE @strSQL1    NVARCHAR(4000)        -- SQL语句1
16     DECLARE @strSQL2    NVARCHAR(4000)        -- SQL语句2
17
18     -- 创建临时表
19     -- 用来保存表的编号以及主键
20     CREATE TABLE #Temp_Paging
21     (
22         Temp_Paging_Id INT,
23         RowNumber INT
24     )
25     SET @strSQL1 = 'INSERT INTO [#Temp_Paging](Temp_Paging_Id, RowNumber) SELECT ' + @PrimaryKey + ', ROW_NUMBER() OVER (' + @strOrderBy + ') AS RowNumber FROM ' + @SqlDataTable + ' ' + @strWhere
26     EXEC SP_EXECUTESQL @strSQL1
27     SET @recordCount = @@ROWCOUNT -- 取得总记录数
28    
29     -- 判断页索引
30     IF @pageIndex > @recordCount * 1.0 / @pageSize + 1.0 OR @recordCount <= @pageSize
31         BEGIN
32             SET @pageIndex = 1
33         END
34    
35     -- 分页查询
36     SET @strSQL2 = 'SELECT ' + @Fields + ' FROM ' + @SqlDataTable + ' WHERE ' + @PrimaryKey + ' IN (SELECT Temp_Paging_Id FROM [#Temp_Paging] WHERE RowNumber BETWEEN ' + Str((@pageIndex - 1) * @pageSize + 1) + ' AND ' + Str(@pageIndex * @pageSize) + ') ' + @strOrderBy
37     EXEC SP_EXECUTESQL @strSQL2
38     DROP TABLE #Temp_Paging -- 删除临时表
39 END
从原分页存储过程很容易看出,这里运用了临时表保存编号,然后在通过pageIndex和pageSize计算所得,进行分页。
因为这里还以主键作

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Request.ServerVariables 参数大全
      • 执行全文索引时出现权限不足的解决方法
      • 导入excel文件处理流程节点的解决方案
      • 查看sql修改痕迹(SQL Change Tracking on Table)
      • MongoDB安装为Windows服务方法与注意事项
      • App数据层设计及云存储使用指南
      • PostgreSQL启动过程中的那些事三:加载GUC参数
      • 写给MongoDB开发者的50条建议Tip1
      • Percolator与分布式事务思考(二)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1