sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好。

在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~

1.SqlServer 2005:

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE 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      --返回总页数asbegin  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 ---返回记录总数   Endend

2.Sql Server 2005:

/****** 对象: StoredProcedure [dbo].[up_Page2005V2]  脚本日期: 05/21/2008 11:27:15 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- 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      --返回总页数ASBEGIN   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 ---返回记录总数   EndENDGO

3.Sql Server 2005:

/****** 对象: StoredProcedure [dbo].[up_Page2005V2_Join]  脚本日期: 05/21/2008 11:27:30 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE 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      --返回总页数ASBEGIN   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 ---返回记录总数   EndEND
USE [game]GO/****** 对象: StoredProcedure [dbo].                            123下一页阅读全文

更多相关文章

  1. android分页查询获取系统联系人信息
  2. Android入门教程(三十一)------SQLite分页读取
  3. android ListView的分段显示、分页显示(附源码)
  4. android左右滑动加载分页以及动态加载数据
  5. Android(安卓)listview怎么实现滚动分页
  6. Android(安卓)ListView专题之十二 分页不同的解决方案
  7. Android分页控件xlistview
  8. android中滑动SQLite数据库分页加载
  9. Android(安卓)分页组件

随机推荐

  1. 小伙Python爬虫并自制新闻网站,太好玩了
  2. 昨天,终于拿到了腾讯 offer
  3. 独乐乐不如众乐乐,如何装逼的求众数
  4. 拜托,面试官别问我「布隆」了
  5. 使用快慢指针求解「环形链表」so easy!
  6. 动画:七分钟理解什么是KMP算法
  7. 推荐一个项目:数据结构和算法必知必会的 5
  8. 拓扑排序原理与解题套路
  9. 动画:什么是 BF 算法 ?
  10. 高考前一天,六月六号,加一!