源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

SqlServer 2000、2005分页存储过程整理第1/3页

  • 时间:2022-09-05 06:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:SqlServer 2000、2005分页存储过程整理第1/3页
sql server 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持join的,sql server 2000的分页存储过程,也可以运行在sql server 2005上,但是性能没有sql server 2005的版本好。 在最后 我还附带了一个二分法的分页存储过程,也很好用的说哈~~ [b]1.SqlServer 2005:[/b]
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

[b]2.Sql Server 2005:[/b]
/****** 对象: 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

[b]3.Sql Server 2005:[/b]
/****** 对象: 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

[b]4.Sql Server 2000:[/b]
USE [game]
GO
/****** 对象: StoredProcedure [dbo].
当前1/3页 [b]1[/b][url=http://www.1sucai.cn/article/61166_2.htm]2[/url][url=http://www.1sucai.cn/article/61166_3.htm]3[/url][url=http://www.1sucai.cn/article/61166_2.htm]下一页[/url][url=http://www.1sucai.cn/article/61166_all.htm]阅读全文[/url]
[h3]您可能感兴趣的文章:[/h3][list][*][url=http://www.1sucai.cn/article/76321.htm]SQLServer存储过程中事务的使用方法[/url][/*][*][url=http://www.1sucai.cn/article/74364.htm]SQL SERVER调用存储过程小结[/url][/*][*][url=http://www.1sucai.cn/article/71427.htm]五种SQL Server分页存储过程的方法及性能比较[/url][/*][*][url=http://www.1sucai.cn/article/69023.htm]SQL Server存储过程中使用表值作为输入参数示例[/url][/*][*][url=http://www.1sucai.cn/article/67702.htm]深入分析SQL Server 存储过程[/url][/*][*][url=http://www.1sucai.cn/article/59915.htm]Java中调用SQL Server存储过程详解[/url][/*][*][url=http://www.1sucai.cn/article/54732.htm]谈谈sqlserver自定义函数与存储过程的区别[/url][/*][*][url=http://www.1sucai.cn/article/54730.htm]SQL Server 2008 存储过程示例[/url][/*][*][url=http://www.1sucai.cn/article/53890.htm]SQLServer用存储过程实现插入更新数据示例[/url][/*][*][url=http://www.1sucai.cn/article/45578.htm]c#实现sqlserver事务处理示例[/url][/*][*][url=http://www.1sucai.cn/article/80636.htm]SQL Server存储过程中编写事务处理的方法小结[/url][/*][/list]
[b]Tags:[/b][url=http://common.jb51.net/tag/SqlServer/1.htm]SqlServer[/url] [url=http://common.jb51.net/tag/2000/1.htm]2000[/url] [url=http://common.jb51.net/tag/2005/1.htm]2005[/url] [url=http://common.jb51.net/tag/%E5%88%86%E9%A1%B5/1.htm]分页[/url] [url=http://common.jb51.net/tag/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/1.htm]存储过程[/url]
[h1]相关文章[/h1] [list][*]2009-06-06[url=http://www.1sucai.cn/article/18677.htm]SQL 实用语句[/url][/*][*]2009-10-10[url=http://www.1sucai.cn/article/20624.htm]SQl 跨服务器查询语句[/url][/*][*]2016-01-01[url=http://www.1sucai.cn/article/77790.htm]SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能[/url][/*][*]2017-02-02[url=http://www.1sucai.cn/article/106415.htm]微信小程序 滚动选择器(时间日期)详解及实例代码[/url][/*][*]2011-12-12[url=http://www.1sucai.cn/article/29270.htm]SQLServer中数据库文件的存放方式,文件和文件组[/url][/*][*]2009-06-06[url=http://www.1sucai.cn/article/18535.htm]sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句[/url][/*][*]2007-08-08[url=http://www.1sucai.cn/article/11110.htm]sql server中datetime字段去除时间的语句[/url][/*][*]2012-01-01[url=http://www.1sucai.cn/article/29387.htm]通过SQL Server的位运算功能巧妙解决多选查询方法[/url][/*][*]2010-08-08[url=http://www.1sucai.cn/article/24653.htm]清空数据库中所有表记录 记录ID恢复从0开始[/url][/*][*]2014-08-08[url=http://www.1sucai.cn/article/53726.htm]解决SqlServer 各版本 sa帐户不能登录问题[/url][/*][/list]
[url=http://www.1sucai.cn/article/61166.htm#comments][/url]
[h1]最新评论[/h1]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部