SqlServer 2000、2005分页存储过程整理第1/3页
程序员文章站
2022-06-07 23:04:56
sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行...
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存储过程中编写事务处理的方法小结
相关文章
- 本篇文章小编将为大家介绍,基于存储过程的详细介绍,有需要的朋友可以参考一下2013-04-04
- case 子查询连接查询在sql开发中很常用的一个查询功能,感兴趣的你可不要错过本文,接下来为你详细介绍下2013-02-02
下一篇: SQL Server 文件操作方法
最新评论