分页sql存储过程

简介:
01 set ANSI_NULLS ON
02 set QUOTED_IDENTIFIER ON
03 go
04  
05 /*
06 功能描述: 通用分页显示查询
07 如果有自增标识字段,在@strGetFields中不要加入此字 段信息,
08 如果非要加入的话,要 (fldName + 0) AS fldName 这样处理;
09 输入参数:
10 @tblName: 表名
11 @strGetFields: 需要返回的列 '*':返回所以列信息
12 @PageSize: 页尺寸
13 @PageIndex: 页码
14 @doCount: 返回记录总数, 非 0 值则返回
15 @strOrderBy: 排序字段信息,(注意: 不要加 ORDER BY)
16 格式: Field1 DESC, Field2 ASC
17 @strWhere: 查询条件,(注意: 不要加 WHERE)
18 输出参数: @RecordCount: 记录总数
19 作 者: Nestcn
20 创建时间: 2010-03-09
21 更改纪录:
22 */
23 ALTER PROCEDURE [dbo].[MyPagination]
24 (
25 @tblName varchar(255),
26 @strGetFields varchar(1000) = '*',
27 @PageSize int = 10,
28 @PageIndex int = 1,
29 @doCount bit = 0,
30 @strOrderBy varchar(500) = '',
31 @strWhere varchar(1500) = '',
32 @RecordCount int output
33 )
34 AS
35 -- 主语句
36 DECLARE @strSQL varchar(5000) SET @strSQL = ''
37 -- 排序变量
38 DECLARE @strOrder varchar(400) SET @strOrder = ''
39  
40 SET @RecordCount = 0
41 --如果@doCount传递过来的不是0,就执行总数统计
42 IF (@doCount != 0)
43 BEGIN
44 DECLARE @sWhere varchar(2000)
45  
46 SET @sWhere = ''
47 IF (@strWhere != '')
48 SET @sWhere = ' WHERE ' + @strWhere
49  
50 SET @strSQL = 'if exists (select * from dbo.sysobjects where id = object_id(''[dbo].[tmpTable]'') and OBJECTPROPERTY(id, ''IsUserTable'') = 1) '
51 SET @strSQL = @strSQL + ' UPDATE tmpTable SET Total = (SELECT COUNT(*) FROM [' + @tblName + '] ' + @sWhere + ') '
52 SET @strSQL = @strSQL + ' ELSE SELECT COUNT(*) AS Total INTO tmpTable FROM [' + @tblName + '] ' + @sWhere
53  
54 EXEC (@strSQL)
55  
56 SELECT @RecordCount=Total FROM tmpTable
57  
58 --删除总数统计临时表
59 EXEC ('DROP TABLE tmpTable')
60 END
61  
62 PRINT @RecordCount
63  
64 --排序字段信息
65 IF (@strOrderBy != '')
66 SET @strOrder = ' ORDER BY ' + @strOrderBy
67 --如果是第一页就执行以上代码,这样会加快执行速度
68 IF (@PageIndex = 1)
69 BEGIN
70 IF (@strWhere != '')
71 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM [' + @tblName + '] WHERE ' + @strWhere + @strOrder
72 ELSE
73 SET @strSQL = 'SELECT TOP ' + str(@PageSize) + ' ' + @strGetFields + ' FROM ['+ @tblName + '] '+ @strOrder
74 END
75 ELSE
76 BEGIN
77 --为搜索表建立自动编号 保存到临时表中
78 SET @strSQL = 'SELECT TOP ' + str(@PageIndex*@PageSize) + ' IDENTITY(int,1,1) AS IID, ' + @strGetFields + ' INTO #tmpTable FROM [' + @tblName + ']'
79 IF (@strWhere != '')
80 SET @strSQL = @strSQL + ' WHERE ' + @strWhere + @strOrder
81 ELSE
82 SET @strSQL = @strSQL + @strOrder
83  
84 --以下代码赋予了@strSQL以真正执行的SQL代码
85 SET @strSQL = @strSQL + ' SELECT ' + @strGetFields + ' FROM #tmpTable WHERE IID > ' + str((@PageIndex-1)*@PageSize) + ' DROP TABLE #tmpTable'
86 END
87  
88 PRINT @strSQL
89  
90 --执行分页查询
91 EXEC (@strSQL)
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2010/03/09/1681772.html,如需转载请自行联系原作者
相关文章
|
13天前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
68 11
|
16天前
|
SQL Java 数据库连接
Java中实现SQL分页的方法
无论何种情况,选择适合自己的,理解了背后的工作原理,并能根据实际需求灵活变通的方式才是最重要的。
37 9
|
7月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
174 1
|
6月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
7月前
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
332 1
|
7月前
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
136 3
|
7月前
|
存储 SQL 数据库
Sql Server 存储过程怎么找 存储过程内容
Sql Server 存储过程怎么找 存储过程内容
380 1
|
7月前
|
存储 SQL 数据库
SQL Server 临时存储过程及示例
SQL Server 临时存储过程及示例
109 3
|
9月前
|
SQL 关系型数据库 MySQL
SQL中如何实现分页?
【8月更文挑战第3天】SQL中如何实现分页?
258 36
|
7月前
|
存储 SQL 安全