当前位置: 首页 > 编程日记 > 正文

sql server 2005分页存储过程和sql server 2000分页存储过程(摘)

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

相关文章:

topcoder srm 691 div1 -3

1、给定一个$n$个顶点$n$个边的图&#xff0c;边是$(i,a_{i})$&#xff0c;顶点编号$[0,n-1]$。增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$&#xff0c;去掉边$(x,a_{x})$&#xff0c;增加边$(x,n)$。最后使得顶点0和1相连。有多少种$M$? 思路&#…

Matlab与线性代数 -- 矩阵的重组2

本图文详细介绍了矩阵重组的第二种情况任意两行或两列进行对换。

mac通过tree源码编译安装tree

通过tree源码编译安装 下载源码&#xff1a;curl -O ftp://mama.indstate.edu/linux/tree/tree-1.6.0.tgz 解压源码&#xff1a;tar xzvf tree-1.6.0.tgz 修改Makefile文件&#xff1a; tree默认的是linux的编译环境&#xff0c;因此移植到mac里面需要注释掉linux的编译选项&am…

java IO流文件的读写具体实例

IO流的分类&#xff1a;1、根据流的数据对象来分&#xff1a;高端流&#xff1a;所有的内存中的流都是高端流&#xff0c;比如&#xff1a;InputStreamReader 低端流&#xff1a;所有的外界设备中的流都是低端流&#xff0c;比如InputStream&#xff0c;OutputStream 如何区分…

Matlab与线性代数 -- 矩阵的重组3

本图文详细介绍了矩阵重组的第三种情况&#xff0c;从矩阵中选取子矩阵。

ASP.NET小收集:IFrame使用

使用Iframe制作一个固定框架&#xff0c;很方便与象后台网站之类的页面1<html xmlns"http://www.w3.org/1999/xhtml">2<head runat"server">3<title>后台</title>4</head>5<frameset cols"170,*"framespacing&…

linux mac中实现类似secureCRT的clone session

在你的登录账户下的.ssh文件夹新建一个文件&#xff1a;config. cd ~/.ssh vi config config的文件中&#xff0c;内容为&#xff1a; host * ControlMaster auto ControlPath ~/.ssh/master-%r%h:%p 重新打开终端&#xff0c;第一次&#xff0c;你还是需要输入密码&#xff0c…

C#动态加载DLL(转)

利用反射进行动态加载和调用.Assembly assAssembly.LoadFrom(DllPath); //利用dll的路径加载加载dll后,需要使用dll中某类.Type typeass.GetType(“TypeName”);//利用类型的命名空间和名称获得类型需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略…

mysql高可用之MMM

博主QQ&#xff1a;819594300博客地址&#xff1a;http://zpf666.blog.51cto.com/有什么疑问的朋友可以联系博主&#xff0c;博主会帮你们解答&#xff0c;谢谢支持&#xff01;一、MMM简介&#xff1a;MMM即Multi-MasterReplication Manager for MySQL:mysql多主复制管理器。M…

Matlab与线性代数 -- 矩阵的重组4

本图文详细描述了矩阵重组的第四种情况&#xff0c;将矩阵改写成行向量或者列向量。

利用spring aop统一处理异常和打日志

利用spring aop统一处理异常和打日志 spring aop的概念&#xff0c;很早就写博客介绍了&#xff0c;现在在工作中真正使用。 我们很容易写出的代码 我们很容易写出带有很多try catch 和 logger.warn(),logger.error()的代码&#xff0c;这样一个方法本来的业务逻辑只有5行&a…

Matlab与线性代数 -- 矩阵的重组5

本图文详细介绍了矩阵重组的Matlab命令reshape()。

windows XP下Python2.7包管理工具安装-setuptool,pip、distribute、nose、virtualenv

在Python开发中为了对项目进行管理和调试。必须安装一些特定的软件包。据说业内这个叫做yak shaving-做一个非常酷非常绚丽的Python项目之前&#xff0c;必须做的一些枯燥无味的准备工作。本文介绍了setuptool。pip、distribute、nose、virtualenv的安装。 1&#xff0c;pytho…

黑客必知的SQL语句 黑客知道,程序员必知

SQL语句先前写的时候&#xff0c;很容易把一些特殊的用法忘记&#xff0c;我特此整理了一下SQL语句操作。 一、基础 1、说明&#xff1a;创建数据库 Create DATABASE database-name 2、说明&#xff1a;删除数据库 drop database dbname 3、说明&#xff1a;备份sql server --…

AutowireCapableBeanFactory,实现不必配置xml文件,动态加载bean

场景 今天遇见一个问题&#xff0c;如何能做到一个类&#xff0c;没有在spring的配置文件中配置&#xff0c;但是还能通过某种方式加载进来。通过查看一些代码&#xff0c;查看stackoverflow&#xff0c;了解了一些知识。 如果一个类并没有在applicationContext中配置我们可以…

[导入]如何理解Return的返回值?

如何理解Return的返回值&#xff1f; 问题&#xff1a; 在创建和录制脚本的时候&#xff0c;发现在脚本vuser_init、Action、vuser_end三部分&#xff0c;都会有一条“return 0;”语句&#xff0c;那么我们平时在编写脚本时如何应用return语句&#xff0c;return不同的返回值又…

如何利用神经网络结合遗传算法进行非线性函数极值寻优(2)

如何利用神经网络结合遗传算法进行非线性函数极值寻优

自己亲自写的两本linux资料,免费下载,pdf文档

第一本是我写的韩顺平老师解说的linux视频的笔记&#xff0c;该视频原本有21讲&#xff0c;可是我始终没有找到当中的17、18讲。可是其它部分我感觉及记录的还是蛮认真的。该套视频解说的非常基础&#xff0c;因此我的这本笔记也非常基础。这里是免积分在csdn上的下载地址&…

深入理解Java:SimpleDateFormat安全的时间格式化

转自&#xff1a;http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html 想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类&#xff0c;该类用来对日期字符串进行解析和格式化输出&#xff0c;但如果使用不小心会导致非常微妙和难以…

如何提高增加包含大量记录的表的主键字段的效率

如何提高增加包含大量记录的表的主键字段的效率 LazyBee 1 问题的提出&#xff1a; 在给客户升级数据库系统时&#xff0c;由于报表的需要&#xff0c;系统中每一个表都需要有主键字段。系统审计表自然也有这个要求—需要增加一个identify的字段&#xff0c;但这个表中有2000多…

${pageContext.request.contextPath} JSP取得绝对路径

在使用的时候可以使用${pageContext.request.contextPath}&#xff0c;也同时可以使用<%request.getContextPath()%>达到同样的效果&#xff0c;同时&#xff0c;也可以将${pageContext.request.contextPath}&#xff0c;放入一个JSP文件中&#xff0c;将用C&#xff1a;…

Matlab与线性代数 -- 矩阵的水平连接和垂直连接

本图文详细介绍了Matlab中矩阵的水平连接和垂直连接。

Matlab与线性代数 -- 矩阵的复制

本图文详细介绍了Matlab中矩阵复制函数repmat(A,m,n)。

用C#实现抽象工厂模式

大家都知道&#xff0c;在开发中&#xff0c;如果用好了某种模式&#xff0c;那效率…… 嘿嘿 我就不说了 进入正题吧&#xff1a; 以下都为源代码&#xff0c;可直接拷贝&#xff0c;然后自己研究 由于是讲解&#xff0c;所以只涉及基本的架构 项目名为&#xff1a;Ab…

树莓派 raspberry安全关机命令重启命令

树莓派可以通过下面几个命令来实现安全关机&#xff1a;sudo shutdown -h now sudo halt sudo poweroff sudo init 0上面四行代码都可以&#xff0c;执行一行都可以安全关机, ^_^树莓派重启 定时重启方法&#xff1a;sudo reboot shutdown -r now shutdown -r 04:00:00 #定时重…

jps命令(Java Virtual Machine Process Status Tool)(转)

1、介绍 用来查看基于HotSpot的JVM里面中&#xff0c;所有具有访问权限的Java进程的具体状态, 包括进程ID&#xff0c;进程启动的路径及启动参数等等&#xff0c;与unix上的ps类似&#xff0c;只不过jps是用来显示java进程&#xff0c;可以把jps理解为ps的一个子集。 使用jps时…

使用 Smartmontools 检测硬盘坏道

2019独角兽企业重金招聘Python工程师标准>>> 在这篇文章中&#xff0c;我们通过几个必要的步骤&#xff0c;使用特定的磁盘扫描工具让你能够判断 Linux 磁盘或闪存是否存在坏道。 在Linux上使用坏块工具检查坏道 坏块工具可以让用户扫描设备检查坏道或坏块&#xff…

如何使用Github管理自己的代码

本文介绍了使用Github管理代码的基本操作方法。由LSGO软件技术团队的安晟提供。

javassist 初步学习

javassist简介 javassist可以对一个已经编译好了的.class文件的字节码进行改动&#xff0c;比如说我可以为一个类添加一个方法&#xff0c;添加一个属性&#xff0c;也可以修改一个方法等&#xff0c;还可以对一个方法&#xff0c;异常进行拦截等。 我们常用到的动态特性主要…

.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现

原文:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现我个人认为&#xff0c;开发MIS&#xff0c;首先就得解决网格的问题,而开发工具为我们提供了如DataGrid、MSHFlexGrid的控件。其次&#xff0c;是打印的问题&#xff0c;将业务单据与数据报表打印出来。可想…