分页存储过程
表T_phone中字段:Id, Haoduan, Adress, Type, Quhao
1,ROW_NUMBER()是个开窗函数,它可以与聚合函数一起用,就算删除表中的列,排序也不会乱
select *,ROW_NUMBER() over(order by id) as 排序 from T_Phone
2,那么分页的sql语句就是这样,假如一页十行,查询第三页
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 select * from 2 ( 3 select *,ROW_NUMBER() over(order by id) as 排序 from T_Phone 4 ) as tbl where tbl.Id between 2*10+1 and 3*10
3,分页的存储过程就可以这样写
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 CREATE PROC usp_phone 2 @index int=1, 3 @pageSize int=10 4 AS 5 BEGIN 6 SELECT * FROM(SELECT ROW_NUMBER()OVER (ORDER BY id)AS rownum,*from T_phone) AS T 7 WHERE rownum BETWEEN (@index-1)*@pageSize+1 and @index *@pageSize 8 END
执行存储过程:exec usp_phone 10,10
4,存储过程优点
--执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
--允许模块化程序设计 – 类似方法的复用
--提高系统安全性 – 防止SQL注入
--减少网络流通量 – 只要传输 存储过程的名称
6,缺点:调试麻烦,把所有的业务逻辑都放在了数据库中,改动的时候麻烦。