最近在面试的时候,遇到个奇葩的秃顶老头面试官。

问:写过存储过程分页吗?

答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过。

问:那你这么多年工作中就没写过吗?

答:的确没写过,因为项目数据量都特别小。

然后,这奇葩就起身就要走人了,连个招呼都没有。想我面试了这么多公司,这种奇葩面试官,还是头回见到,一点职业素质,礼貌都木有。气死我了!

明天要去入职新公司了,今天闲来无事,试着写了写这个存储过程分页。只在SQLSERVER2008上测试过,不过我想,2000以上版本应该都会支持的吧。

废话到此,上代码。

  

  1. if (object_id('Proc_Paging', 'P') is not null)
  2. drop proc Proc_Paging
  3. go
  4. create procedure Proc_Paging
  5. (
  6. @TableName varchar(20),--表名
  7. @PageIndex int=0,--起始页索引,从0开始
  8. @PageSize varchar(1000)='10',--默认每页显示的数量,默认每页显示10条记录
  9. @Params varchar(100)='*',--分页结果中显示的字段,默认显示全部的字段
  10. @ID varchar(20)='ID',--数据编号排序字段,默认为ID
  11. @OrderByID varchar(20)='asc',--数据编号排序方式,默认为正序排序
  12. @StrWhereSource varchar(100),--分页数据的查询条件,必须以where开头
  13. @StrWherePaging varchar(100),--已经分页的数据的查询条件,不能以where开头
  14. @OrderBy varchar(100)='ID asc'--数据排序方式
  15. )
  16. as
  17. declare @Sql varchar(8000),@PageStartNum varchar(1000),@PageEndNum varchar(1000),@Sql2 varchar(1000),@Sql3 varchar(1000)
  18. --1.获取指定页数据
  19. set @PageStartNum=(@PageIndex)*(@PageSize)--起始数据编号
  20. set @PageEndNum=(@PageIndex+1)*(@PageSize)--截止数据编号
  21. set @Sql='select row_number() over(order by '+@ID+' '+@OrderByID+') Num,'+@Params+' '+
  22. 'into #temp '+
  23. 'from '+@TableName+' '+@StrWhereSource+''+
  24. 'select * from #temp where Num between '+
  25. ''+(@PageStartNum)+' and '+(@PageEndNum)+' '+@StrWherePaging+' order by '+@OrderBy+' '
  26. exec(@Sql)
  27. --print @Sql
  28. --2.获取总记录数
  29. set @Sql2='select count(1) from '+@TableName+''
  30. exec(@Sql2)
  31. --print @Sql2
  32. --3.获取分页总数
  33. set @Sql3='select ceiling(count(1)*1.0/('+@PageSize+')) from '+@TableName+''
  34. exec(@Sql3)
  35. --print @Sql3
  36. go
  37. --测试代码
  38. exec Proc_Paging 'Customers',2,10,'CustomerID,CompanyName,Address,City,PostalCode','CustomerID','asc','where PostalCode>''1000'' ','and Num>1 ','Num asc'
  39. go

  下面是运行结果截图。

  执行结果:

  生成的sql语句:

大神,勿喷;菜鸟,轻拍。谢谢!

MS SQLSERVER通用存储过程分页的更多相关文章

  1. 改良版的SQL Service 通用存储过程分页

    上次写了通用存储过程.感觉还是有很大的BUG.就是条件不能参数画化.这个BUG可以说是致命的.但是我一直想在用什么方法能解决这个东西.其实我只是想写少量的代码来做更多的事情.我想能不能传集合给存储过程 ...

  2. SqlServer通用存储过程

    1.增删改—通用存储过程 --增删改 存储过程create proc Infos_InsertUpdateDelete( @Id int, @Name varchar(50), @DataTable_ ...

  3. 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)

    使用前提 查询表必须有ID字段,且该字段不能重复,建议为自增主键 背景 如果使用ADO.NET进行开发,在查询分页数据的时候一般都是使用分页存储过程来实现的,本文提供一种通用的分页存储过程,只需要传入 ...

  4. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  5. 如此高效通用的分页存储过程是带有sql注入漏洞的

    原文:如此高效通用的分页存储过程是带有sql注入漏洞的 在google中搜索“分页存储过程”会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如 ...

  6. 【原创】10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程)

    有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc4+Dapper+Dapper扩展+Sqlserver 目前主要实现 ...

  7. Mvc+Dapper+存储过程分页10万条数据

    10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程) 有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc ...

  8. 分享一个通用的分页SQL

    又很久没写博客,今天记录一个SQLserver通用分页存储过程(适用于SqlServer2000及以上版本) 1.支持连表 2.支持条件查询 USE [MYDB] GO /****** Object: ...

  9. asp.net利用存储过程分页代码

    -最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination ), -- 表名 ) = '*', -- 需要返回的列 )='', -- 排序的字段名 , -- ...

随机推荐

  1. Sumsets(3sum问题,枚举d,c二分a+b)

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9997   Accepted: 2736 Descripti ...

  2. Jam's math problem(思维)

    Jam's math problem Submit Status Practice HDU 5615   Description Jam has a math problem. He just lea ...

  3. 三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

    边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次相应为:上北(NORTH).下南(SOUTH).左西(WEST).右东(EAST),中(CENT ...

  4. 第三章:挖掘SimpleSection.o

    1.查看.o目标文件用objdump 命令, 参数“-h"就是把ELF文件的各个段的基本信息打印出来.也可以使用-X打印更多的信息. 段的属性,Size是段的长度,FIle off 是段开始 ...

  5. Javascript 中的false,零值,null,undefined和空字符串对象

    在Javascript中,我们经常会接触到题目中提到的这5个比较特别的对象--false.0.空字符串.null和undefined.这几个对象很容易用错,因此在使用时必须得小心. 类型检测 我们下来 ...

  6. jQuery事件绑定方法bind、 live、delegate和on的区别

    我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 1.准备知识 当我们在开始的时候,有些知识是必须具备的: 1 ...

  7. 常用的CSS清除浮动的方法优缺点分析(个人学习笔记)

    一.抛一块问题砖(display: block)先看现象: 分析HTML代码结构: <div class="outer"> <div class="di ...

  8. node.js querystring处理参数

    C:\Documents and Settings\Administrator\WebstormProjects\untitled6>node> url{ parse: [Function ...

  9. Jquery二级简单折叠菜单

    写在前面: 1.前端新手 2.欢迎交流 3. 源代码百度云页面示例链接: http://pan.baidu.com/s/1nt0yjd3 链接失效请留言 效果图: 代码部分:jquery部分: < ...

  10. (七)Android中AIDL的应用与理解

    一.跨应用启动Service Intent serviceIntent=new Intent();serviceIntent.setComponent(new ComponentName(" ...