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

sqlserver2005 分页 SQL语句

发布时间:2020-12-12 15:51:59 所属栏目:MsSql教程 来源:网络整理
导读:1.分页方案一:(利用Not?In和SELECT?TOP分页) ? ?语句形式: ?SELECT?TOP?10?* ?FROM?TestTable ?WHERE?(ID?NOT?IN ???????????(SELECT?TOP? 20 ?id ??????????FROM?TestTable ??????????ORDER?BY?id)) ?ORDER?BY?ID ? ? ?SELECT?TOP?页大小?* ?FROM?TestTab
1.分页方案一:(利用Not?In和SELECT?TOP分页) ? ?语句形式: ?SELECT?TOP?10?* ?FROM?TestTable ?WHERE?(ID?NOT?IN ???????????(SELECT?TOP? 20?id ??????????FROM?TestTable ??????????ORDER?BY?id)) ?ORDER?BY?ID ? ? ?SELECT?TOP?页大小?* ?FROM?TestTable ?WHERE?(ID?NOT?IN ???????????(SELECT?TOP?页大小*页数?id ??????????FROM?表 ??????????ORDER?BY?id)) ?ORDER?BY?ID ? ??? 2.分页方案二:(利用ID大于多少和SELECT?TOP分页) 语句形式: ?? SELECT?TOP?10?* ?FROM?TestTable ?WHERE?(ID?> ???????????(SELECT?MAX(id) ??????????FROM?(SELECT?TOP? 20?id ??????????????????FROM?TestTable ??????????????????ORDER?BY?id)?AS?T)) ?ORDER?BY?ID ? ? ?SELECT?TOP?页大小?* ?FROM?TestTable ?WHERE?(ID?>?(SELECT?MAX(id) ??????????FROM?(SELECT?TOP?页大小*页数?id ??????????????????FROM?表 ??????????????????ORDER?BY?id)?AS?T)) ?ORDER?BY?ID ? ?? 3.分页方案三:(利用SQL的游标存储过程分页) ?create??procedure?SqlPager ?@sqlstr?nvarchar(4000),?--查询字符串 ?@currentpage?int,?--第N页 ?@pagesize?int?--每页行数 ?as ?set?nocount?on ?declare?@P1?int,?--P1是游标的id ??@rowcount? int ?exec?sp_cursoropen?@P1?output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount?output ?select?ceiling(1.0*@rowcount/@pagesize)?as?总页数--,@rowcount?as?总行数,@currentpage?as?当前页? ?set?@currentpage=(@currentpage-1)*@pagesize+ 1 ?exec?sp_cursorfetch?@P1,16,@currentpage,@pagesize? ?exec?sp_cursorclose?@P1 ?set?nocount?off ? ?其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 ?建议优化的时候,加上主键和索引,查询效率会提高。 ? ?通过SQL?查询分析器,显示比较:我的结论是: ?分页方案二:(利用ID大于多少和SELECT?TOP分页)效率最高,需要拼接SQL语句 ?分页方案一:(利用Not?In和SELECT?TOP分页)???效率次之,需要拼接SQL语句 ?分页方案三:(利用SQL的游标存储过程分页)????效率最差,但是最为通用

(编辑:李大同)

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

    推荐文章
      热点阅读