SQLSERVER2005的函数Row_Number,分页太方便了

humozhi 2009-04-09 02:51:50
最近在使用sqlserver2005的数据库编码,查到有一个row_number(order by 【字段】)的函数,通过该函数进行分页非常的方便,请大家看看我写的分页存储过程。
--分页存储过程
create procedure [dbo].[proc_TestPage]
--表名
@tablename nvarchar(255),
--排序字段
@sortcolumn nvarchar(255),
--每页记录数
@pagecount int,
--页号
@pageindex int
as
declare @beginrow int
declare @endrow int

set @beginrow=0
set @endrow=0

set @beginrow=(@pageindex-1)*@pagecount+1
set @endrow=@pageindex*@pagecount

declare @sqlstr nvarchar(4000)

set @sqlstr='with table1 as(select *,ROW_NUMBER() OVER(ORDER BY '+ @sortcolumn+' ) AS ROW'+
' FROM '+@tablename+') '
set @sqlstr=@sqlstr +' SELECT * FROM TABLE1 WHERE ROW BETWEEN '+cast(@beginrow as nvarchar )+' and '+cast(@endrow as nvarchar)

exec(@sqlstr)
...全文
1374 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
PitTroll 2011-07-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100617/04/80d1bd99-2e1c-4083-ad87-72bf706cb536.html
LZ看看这个
stszd604 2011-07-15
  • 打赏
  • 举报
回复
假设是1千万

取最中间10ge

那么是500万的 ROWNUMBER 定序快还是
TOP 500万的TOP临时快


非专业猜测 欢迎拍砖
肖恩 2011-07-15
  • 打赏
  • 举报
回复
菜鸟路过学习!!
988kook 2011-07-15
  • 打赏
  • 举报
回复
其实 真的没有top效率高
happyxiaowuge 2010-01-11
  • 打赏
  • 举报
回复
顶!貌似很好
但有点不太明白 为什么EXEC后面不接存储过程的名称 而是一个变量名
RogerXi 2010-01-11
  • 打赏
  • 举报
回复
学习
没怎么好好用过这个函数
sunzhong2003 2010-01-11
  • 打赏
  • 举报
回复
我是简要的测试了下这个分页存储过程的,的确没有网上流传的千万级的存储过程(TOP方式)好。
不知道大家测试如何
xray2005 2010-01-11
  • 打赏
  • 举报
回复
LZ现在才知道啊?

你out 了!呵呵。。。
sjfujiang 2010-01-11
  • 打赏
  • 举报
回复
很好.收藏了.
cansum396 2010-01-11
  • 打赏
  • 举报
回复
不错
namhyuk 2009-12-27
  • 打赏
  • 举报
回复
也参考一下Scott Mitchel的Data Access Tutorials里提出的分页方法吧。
配合ObjectDataSource分页很方便。
bbs12bbs 2009-12-27
  • 打赏
  • 举报
回复
top max 分页,性能比rownumber略好,但缺点是 如果用标识作为排序字段的话,可能出现数据不连续的情况。
top not in 这个性能最差,不推荐,因为每次都要读取二次表。
rownumber 分页,性能也很强,是SQLSERVER2005新增的方式,优点是使用记录行数来作为排序字段,记录连续很强大,可扩展性能也强。
zhucemajiaburongyi 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lxf2000104 的回复:]
使用是方便,但是性能不是最好的。
还是top好。
[/Quote]
TOP好? 你OUT了
lljfl 2009-12-08
  • 打赏
  • 举报
回复
观注,
留位
xklyx 2009-12-08
  • 打赏
  • 举报
回复
说性能不好的自己测试过吗?不喜欢新生事物啊。我测试结果,16万条记录,即使返回最后的10条显示执行时间也是0.00,何来性能不好?
joeandlily 2009-04-13
  • 打赏
  • 举报
回复
学习了,谢谢。
humozhi 2009-04-13
  • 打赏
  • 举报
回复
大家测试过,这个存储过程和Top之间的差距吗
ycg_893 2009-04-11
  • 打赏
  • 举报
回复
是不错,但性能不好
wpuuuu 2009-04-11
  • 打赏
  • 举报
回复
顶一下
liu4545533 2009-04-09
  • 打赏
  • 举报
回复
使用临时表也一个比较好的选择啊
加载更多回复(10)

110,579

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧