USE [svnhost]

GO

/****** 对象:  StoredProcedure [dbo].[up_Page2005]    脚本日期: 05/21/2008 11:27:05 ******/

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

GO

/****** 对象:  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

/****** 对象:  StoredProcedure [dbo].[up_Page2005V2_Join]    脚本日期: 05/21/2008 11:27:30 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:        <Author,,Name>

-- Create date: <Create Date,,>

-- Description:    <Description,,>

-- =============================================

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

USE [game]
GO
/****** 对象: StoredProcedure [dbo].[page] 脚本日期: 05/21/2008 11:37:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE proc [dbo].[page]
@RecordCount int output,
@ReturnCount bit,
@QueryStr nvarchar(1000)='table1',--表名、视图名、查询语句
@PageSize int=20, --每页的大小(行数)
@PageCurrent int=2, --要显示的页 从0开始
@FdShow nvarchar (2000)='*', --要显示的字段列表
@IdentityStr nvarchar (100)='id', --主键
@WhereStr nvarchar (2000)='1=1',
@FdOrder nvarchar(100)='desc' --排序 只能取desc或者asc
as

set nocount on

declare

@sql nvarchar(2000)

if @WhereStr = '' begin
set @WhereStr = '1=1'
end

if @ReturnCount=1 begin
declare @tsql nvarchar(200)
set @tsql=N'select @RecordCount = count(*) from ' + @QueryStr + ' where ' + @WhereStr
exec sp_executesql @tsql,N'@RecordCount int output',@RecordCount output
end

if @PageCurrent = 0 begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' ' + @FdOrder
end

else begin
if upper(@FdOrder) = 'DESC' begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '< ( select min(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' desc) as t) order by ' + @IdentityStr + ' desc'
end
else begin
set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '> ( select max(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' asc) as t) order by ' + @IdentityStr + ' asc'
end
end
--print @sql
execute(@sql)
--select @t = datediff(ms,@t1,getdate())---------------------

转载于:https://www.cnblogs.com/piwxsz/archive/2008/06/10/1216915.html

sql server 2005分页存储过程和sql server 2000分页存储过程(摘)相关推荐

  1. SQL Server 2005/2008 图形界面(SQL Server Management Studio Express)

    SQL Server 2005/2008 图形界面(SQL Server Management Studio Express)2009年03月25日 星期三 18:28SQL 2005 新建数据库 S ...

  2. 安装SQL Server 2005时,出现“SQL Server 服务无法启动。……”提示的解决方法

    安装SQL Server 2005时,出现"SQL Server 服务无法启动.--"提示的解决方法 上午在自己XP SP3电脑上安装SQL Server 2005时出现如下提示: ...

  3. SQL Server 2005安装图解以及SQL 2005 SP3补丁安装

    MSSQL2005数据库版本    SQL Server 2005 的各版本之间选择 大多数企业都在三个 SQL Server 版本之间选择:SQL Server 2005 Enterprise Ed ...

  4. Microsoft 数据库三版本共存:SQL Server 2000(SP4) + SQL Server 2005(SP2) + SQL Server 2008

    Microsoft 数据库三版本共存: SQL Server 2000(SP4) + SQL Server 2005(SP2) + SQL Server 2008 一.服务项: 1.SQL Serve ...

  5. SQL Server 2005 企业版没有 Microsoft SQL Server Management

    我从网上下载的:SQL Server 2005 集成sp2的 企业版安装后没发现 Management Studio管理工具,起初以为是自己安装时没装上,昨天试了全部安装后还是没找到,很是郁闷,在网上 ...

  6. SQL Server 2005系列教学(9) SQL 存储过程

    声明变量,SQL规定变量在使用之前先声明,以便以后的程序中用到 格式:   declare 变量名 变量类型[,变量名 变量类型--] 一次可声明多个变量,它们之间用,分隔.用户变量以一个@开头,全局 ...

  7. SQL Server 2005系列教学(2) SQL 服务及创建数据库

    SQL SERVER 2005的服务介绍: 核心服务 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

  8. SQL Server 2005的安装,SQL Server 2005系列之一

    最近复习SQL Server 2005,忽然有了写系列的打算,也不知道能不能写好,今天先写一篇关于SQL Server 2005的安装的博文吧. 和往常一样,我们先来看看SQL Server 2005 ...

  9. 有了SQL Server 2005 JDBC还需要SQL Server 2000 JDBC吗?

    Microsoft SQL Sever 2005 JDBC Driver 1.2 支持连接sql server 2005和sql server 2000数据库. 官方下载地址:http://www.m ...

  10. SQL Server 2005系列教学(1) SQL SERVER2005介绍及安装

    重点在于SQL Server 2005各个版本的安装及测试! 大纲如下: 信息与数据的区别 信息:是现实世界事物的存在方式或运动状态的反映. 数据:数据是信息的载体和具体表现形式,是信息的表现形式. ...

最新文章

  1. node mysql 批量写入_请问如何使用node.js在MySQL中进行批量插入
  2. 小端模式和大端模式_计算机字节顺序(大端法和小端法)详解
  3. java switch null_[改善Java代码]小心switch带来的空值异常
  4. 同一行 绝对定位_电路改造10大点:定位、开槽等,终于有人说清了!
  5. python 温度 符号_【火马】Python学习小记01
  6. 【学习笔记】操作系统之哲学原理
  7. ITK:使用Canny边缘检测过滤器检测边缘
  8. 不用 pip install,你养我吗?
  9. 【LeetCode笔记】剑指 Offer 26-. 树的子结构 (Java、双重dfs、二刷)
  10. 2021快手美妆行业数据营销报告
  11. 自编码器图像去噪matlab,深度有趣 | 05 自编码器图像去噪
  12. 【Django 2021年最新版教程5】前端传递数据到后端处理 GET 方法
  13. 【语音隐写】基于matlab DWT音频数字水印嵌入提取【含Matlab源码 350期】
  14. 计算机vb输入框函数,VB基本函数大全
  15. 6ES7513-1AL02-0AB0的技术参数
  16. linux的原理和运用,Linux操作系统原理与应用_内存寻址
  17. 10本好书读物推荐,职场管理者必读,建议收藏
  18. 解决PyCharm和Spyder不能兼容pip下载第三方包的问题
  19. 摄氏温度转换华氏温度_什么是摄氏温度?
  20. 西门子200SMART加显控触摸屏水处理程序案例控制系统程序,30吨双级反渗透加EDI工艺

热门文章

  1. 如何获取公众号中html,[技巧] 如何获取公众号图文里的视频地址
  2. Dijkstra(迪杰斯特拉)算法简介
  3. Python Qt GUI设计:QScrollBar类实现窗口水平或垂直滑动条效果(拓展篇—4)
  4. C语言中“野指针”、“悬空指针”是什么?
  5. 正点原子:STM32F103(战舰)、STM32F407(探索者)、STM32F103(MINI)原理图和PCB
  6. tensorflow deep_speech2 神经网络结构代码分析
  7. GPU运行Tensorflow详细教程及错误解决
  8. 四、One-hot和损失函数的应用
  9. LeetCode刷题记录1——717. 1-bit and 2-bit Characters(easy)
  10. 计算机社团部门职责,部门职责