各位用户为了找寻关于SqlServer 2000、2005分页存储过程整理的资料费劲了很多周折。这里教程网为您整理了关于SqlServer 2000、2005分页存储过程整理的相关资料,仅供查阅,以下为您介绍关于SqlServer 2000、2005分页存储过程整理的详细内容

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

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

1.SqlServer 2005:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 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:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 /****** 对象: 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:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 /****** 对象: 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