sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好。
在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~
1.sqlserver 2005:
set ansi_nulls on go set quoted_identifier on go create proc [dbo].[up_page2005] @tablename varchar(50), --表名 @fields varchar(5000) = '*', --字段名(全部字段为*) @orderfield varchar(5000), --排序字段(必须!支持多字段) @sqlwhere varchar(5000) = null,--条件语句(不用加where) @pagesize int, --每页多少条记录 @pageindex int = 1 , --指定当前为第几页 @totalpage int output --返回总页数 as begin begin tran --开始事务 declare @sql nvarchar(4000); declare @totalrecord int; --计算总记录数 if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select @totalrecord = count(*) from ' + @tablename else set @sql = 'select @totalrecord = count(*) from ' + @tablename + ' with(nolock) where ' + @sqlwhere exec sp_executesql @sql,n'@totalrecord int output',@totalrecord output--计算总记录数 --计算总页数 select @totalpage=ceiling((@totalrecord+0.0)/@pagesize) if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename else set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename + ' with(nolock) where ' + @sqlwhere --处理页数超出范围情况 if @pageindex<=0 set @pageindex = 1 if @pageindex>@totalpage set @pageindex = @totalpage --处理开始点和结束点 declare @startrecord int declare @endrecord int set @startrecord = (@pageindex-1)*@pagesize + 1 set @endrecord = @startrecord + @pagesize - 1 --继续合成sql语句 set @sql = @sql + ') as t where rowid between ' + convert(varchar(50),@startrecord) + ' and ' + convert(varchar(50),@endrecord) print @sql exec(@sql) --------------------------------------------------- if @@error <> 0 begin rollback tran return -1 end else begin commit tran return @totalrecord ---返回记录总数 end end
2.sql server 2005:
/****** 对象: storedprocedure [dbo].[up_page2005v2] 脚本日期: 05/21/2008 11:27:15 ******/ set ansi_nulls on go set quoted_identifier on go -- ============================================= -- author: <author,,name> -- create date: <create date,,> -- description: <description,,> -- ============================================= create procedure [dbo].[up_page2005v2] @tablename varchar(50), --表名 @fields varchar(5000) = '*', --字段名(全部字段为*) @orderfield varchar(5000), --排序字段(必须!支持多字段) @sqlwhere varchar(5000) = null,--条件语句(不用加where) @pagesize int, --每页多少条记录 @pageindex int = 1 , --指定当前为第几页 @totalrecord int = 0, @totalpage int output --返回总页数 as begin begin tran --开始事务 declare @sql nvarchar(4000); if @totalrecord<=0 begin --计算总记录数 if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select @totalrecord = count(*) from ' + @tablename else set @sql = 'select @totalrecord = count(*) from ' + @tablename + ' with(nolock) where ' + @sqlwhere exec sp_executesql @sql,n'@totalrecord int output',@totalrecord output--计算总记录数 end --计算总页数 select @totalpage=ceiling((@totalrecord+0.0)/@pagesize) if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename else set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename + ' with(nolock) where ' + @sqlwhere --处理页数超出范围情况 if @pageindex<=0 set @pageindex = 1 if @pageindex>@totalpage set @pageindex = @totalpage --处理开始点和结束点 declare @startrecord int declare @endrecord int set @startrecord = (@pageindex-1)*@pagesize + 1 set @endrecord = @startrecord + @pagesize - 1 --继续合成sql语句 set @sql = @sql + ') as t where rowid between ' + convert(varchar(50),@startrecord) + ' and ' + convert(varchar(50),@endrecord) print @sql exec(@sql) --------------------------------------------------- if @@error <> 0 begin rollback tran return -1 end else begin commit tran return @totalrecord ---返回记录总数 end end go
3.sql server 2005:
/****** 对象: storedprocedure [dbo].[up_page2005v2_join] 脚本日期: 05/21/2008 11:27:30 ******/ set ansi_nulls on go set quoted_identifier on go create procedure [dbo].[up_page2005v2_join] @tablename varchar(150), --表名 @fields varchar(5000) = '*', --字段名(全部字段为*) @orderfield varchar(5000), --排序字段(必须!支持多字段) @sqlwhere varchar(5000) = null,--条件语句(不用加where) @pagesize int, --每页多少条记录 @pageindex int = 1 , --指定当前为第几页 @totalrecord int = 0, @totalpage int output --返回总页数 as begin begin tran --开始事务 declare @sql nvarchar(4000); if @totalrecord<=0 begin --计算总记录数 if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select @totalrecord = count(*) from ' + @tablename else set @sql = 'select @totalrecord = count(*) from ' + @tablename + ' where ' + @sqlwhere exec sp_executesql @sql,n'@totalrecord int output',@totalrecord output--计算总记录数 end --计算总页数 select @totalpage=ceiling((@totalrecord+0.0)/@pagesize) if (@sqlwhere='' or @sqlwhere=null) set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename else set @sql = 'select * from (select row_number() over(order by ' + @orderfield + ') as rowid,' + @fields + ' from ' + @tablename + ' where ' + @sqlwhere --处理页数超出范围情况 if @pageindex<=0 set @pageindex = 1 if @pageindex>@totalpage set @pageindex = @totalpage --处理开始点和结束点 declare @startrecord int declare @endrecord int set @startrecord = (@pageindex-1)*@pagesize + 1 set @endrecord = @startrecord + @pagesize - 1 --继续合成sql语句 set @sql = @sql + ') as t where rowid between ' + convert(varchar(50),@startrecord) + ' and ' + convert(varchar(50),@endrecord) print @sql exec(@sql) --------------------------------------------------- if @@error <> 0 begin rollback tran return -1 end else begin commit tran return @totalrecord ---返回记录总数 end end
4.sql server 2000:
use [game] go /****** 对象: storedprocedure [dbo]. 123下一页阅读全文 您可能感兴趣的文章:sqlserver存储过程中事务的使用方法sql server调用存储过程小结五种sql server分页存储过程的方法及性能比较sql server存储过程中使用表值作为输入参数示例深入分析sql server 存储过程java中调用sql server存储过程详解谈谈sqlserver自定义函数与存储过程的区别sql server 2008 存储过程示例sqlserver用存储过程实现插入更新数据示例c#实现sqlserver事务处理示例sql server存储过程中编写事务处理的方法小结
- sqlserver
- 分页
- 存储过程
相关文章
-
如何在sql server中使用随机记录集
这篇文章介绍了如何在sql server里使用随机记录集,需要的朋友可以参考下2015-07-07
sql server 如何去掉内容里面的html标签
这篇文章主要介绍了sql server 去掉内容里边的html标签的实现方法,代码超简单,具有一定的参考借鉴价值,需要的朋友可以参考下2018-05-05
如何监测和优化olap数据库
微软sql server分析服务(ssas)提供了一个用来创建和管理数据挖掘应用和在线分析处理系统的强大引擎,你应该仔细的监测和优化olap数据库和潜在的关系数据源。2015-09-09
sql server数据汇总五招轻松搞定
有些时候你想让sql server 返回一个聚集结果集合,而不是一个详细的结果集。sql server的groupby子句,为你提供了一种聚合sql server数据的方式。groupby子句允许你在一列或多列数据甚至是表达式上进行分组操作,在这篇文章中,我将讨论如何使用groupby子句来汇总数据。2015-09-09
sql server视图的讲解
今天小编就为大家分享一篇关于sql server视图的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
sql server纵表与横表相互转换的方法
这篇文章主要介绍了sql server纵表与横表相互转换的方法,数据库技术:SqlServer 2000、2005分页存储过程整理第1/3页通过图文并茂的形式给大家介绍,介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧2016-09-09
- 本篇文章小编将为大家介绍,基于存储过程的详细介绍,有需要的朋友可以参考一下
2013-04-04
sql server高可用的常见问题分析
sql server高可用不就是微软的那几个技术吗,如replication, failover clustering,数据库技术:SqlServer 2000、2005分页存储过程整理第1/3页将详细介绍,有需求的朋友可以参考下2012-11-11
- case 子查询连接查询在sql开发中很常用的一个查询功能,感兴趣的你可不要错过数据库技术:SqlServer 2000、2005分页存储过程整理第1/3页,接下来为你详细介绍下
2013-02-02
sql server的优化建议与方法
需要了解更多数据库技术:SqlServer 2000、2005分页存储过程整理第1/3页,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!
sql server的优化建议与方法…2007-03-03
最新评论
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/dtteaching/615685.html