加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

MS SQLSERVER通用存储过程分页

发布时间:2020-12-12 12:46:46 所属栏目:MsSql教程 来源:网络整理
导读:? ? 最近在面试的时候,遇到个奇葩的秃顶老头面试官。 问:写过存储过程分页吗? 答:没写过,但是我知道分页存储的原理,我自己也写过,只是在工作中没写过。 问:那你这么多年工作中就没写过吗? 答:的确没写过,因为项目数据量都特别

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

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

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

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

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

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

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

????废话到此,上代码。

if?(object_id('Proc_Paging',?'P')?is?not?null)
????drop?proc?Proc_Paging
go
create?procedure?Proc_Paging
(
	@TableName?varchar(20),--表名
	@PageIndex?int=0,--起始页索引,从0开始
	@PageSize?varchar(1000)='10',--默认每页显示的数量,默认每页显示10条记录
	@Params?varchar(100)='*',--分页结果中显示的字段,默认显示全部的字段
	@ID?varchar(20)='ID',--数据编号排序字段,默认为ID
	@OrderByID?varchar(20)='asc',--数据编号排序方式,默认为正序排序
	@StrWhereSource?varchar(100),--分页数据的查询条件,必须以where开头
	@StrWherePaging?varchar(100),--已经分页的数据的查询条件,不能以where开头
	@OrderBy?varchar(100)='ID?asc'--数据排序方式
)
as
declare?@Sql?varchar(8000),@PageStartNum?varchar(1000),@PageEndNum?varchar(1000),@Sql2?varchar(1000),@Sql3?varchar(1000)
--1.获取指定页数据
set?@PageStartNum=(@PageIndex)*(@PageSize)--起始数据编号
set?@PageEndNum=(@PageIndex+1)*(@PageSize)--截止数据编号
set?@Sql='select?row_number()?over(order?by?'+@ID+'?'+@OrderByID+')?Num,'+@Params+'?'+
'into?#temp?'+
'from?'+@TableName+'?'+@StrWhereSource+''+
'select?*?from?#temp?where?Num?between?'+
''+(@PageStartNum)+'?and?'+(@PageEndNum)+'?'+@StrWherePaging+'?order?by?'+@OrderBy+'?'
exec(@Sql)
--print?@Sql
--2.获取总记录数
set?@Sql2='select?count(1)?from?'+@TableName+''
exec(@Sql2)
--print?@Sql2
--3.获取分页总数
set?@Sql3='select?ceiling(count(1)*1.0/('+@PageSize+'))?from?'+@TableName+''
exec(@Sql3)
--print?@Sql3
go
--测试代码
exec?Proc_Paging?'Customers',2,10,'CustomerID,CompanyName,Address,City,PostalCode','CustomerID','asc','where?PostalCode>''1000''?','and?Num>1?','Num?asc'
go

下面是运行结果截图。

执行结果:


生成的sql语句:


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读