本田亚里沙,上海去青岛旅游,个人简历封面素材
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存储过程中编写事务处理的方法小结
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
数据库SQL---数据库、基本表、视图、索引的定义、修改、删除
在 Azure CentOS VM 中配置 SQL Server 2019 AG - (上)
在 Azure CentOS VM 中配置 SQL Server 2019 AG - (下)
验证码: |
---|
最新评论