当前位置: 首页 > news >正文

绍兴做网站的/重大新闻事件2023

绍兴做网站的,重大新闻事件2023,北京市丰台区住房和城乡建设委员会网站,莆田做外贸网站有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条…

有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条 SQL 语句的分页 SQL 吧。

方法1:

适用于 SQL Server 2000/2005

SELECTTOP页大小*FROMtable1WHEREidNOTIN(SELECTTOP页大小*(页数-1) idFROMtable1ORDERBYid

)ORDERBYid

方法2:

适用于 SQL Server 2000/2005

SELECTTOP页大小*FROMtable1WHEREid>(SELECTISNULL(MAX(id),0)FROM(SELECTTOP页大小*(页数-1) idFROMtable1ORDERBYid

)A

)ORDERBYid

方法3:

适用于 SQL Server 2005

SELECTTOP页大小*FROM(SELECTROW_NUMBER()OVER(ORDERBYid)ASRowNumber,*FROMtable1

) AWHERERowNumber>页大小*(页数-1)

方法4:

适用于 SQL Server 2005

row_number() 必须制定 order by ,不指定可以如下实现,但不能保证分页结果正确性,因为排序不一定可靠。可能第一次查询记录A在第一页,第二次查询又跑到了第二页。

declare @PageNo int ,@pageSize int;

set @PageNo = 2

set @pageSize=20

select * from (

select row_number() over(order by getdate()) rn,* from sys.objects)

tb where rn >(@PageNo-1)*@pageSize and rn <=@PageNo*@pageSize

还有一种方法就是将排序字段作为变量,通过动态SQL 实现,可以改成存储过程。

declare @PageNo int ,@pageSize int;

declare @TableName varchar(128),@OrderColumns varchar(500), @SQL varchar(max);

set @PageNo = 2

set @pageSize=20

set @TableName = 'sys.objects'

set @OrderColumns = 'name ASC,object_id DESC'

set @SQL = 'select * from (

select row_number() over(order by '+@OrderColumns+' ) rn,* from ' +@TableName+')tb where rn >'+convert(varchar(50),(@PageNo-1)*@pageSize) +' and rn <= '+convert(varchar(50),@PageNo*@pageSize)

print @SQL

exec(@SQL)

方法5:(利用SQL的游标存储过程分页)

适用于 SQL Server 2005

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

方法5:(利用MySQL的limit)

适用于 MySQL

mysql中limit的用法详解[数据分页常用]

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。

select * from table limit [offset,] rows | rows offset offset

limit 子句可以被用于强制 select 语句返回指定的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初 始记录行的偏移量是 0(而不是 1): 为了与 postgresql 兼容,mysql 也支持句法: limit # offset #。

mysql> select * from table limit 5,10; // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:

mysql> select * from table limit 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:

mysql> select * from table limit 5; //检索前 5 个记录行

//换句话说,limit n 等价于 limit 0,n。

1. select * from tablename limit 100,15

从100条记录后开始取15条 (实际取取的是第101-115条数据)

2. select * from tablename limit 100,-1

从第100条后开始-最后一条的记录

3. select * from tablename limit 15

相当于limit 0,15 .查询结果取前15条数据

说明,页大小:每页的行数;页数:第几页。使用时,请把"页大小"和"页大小*(页数-1)"替换成数字。

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。

建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:

分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句

分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用

http://www.jmfq.cn/news/5032387.html

相关文章:

  • 我想注册网站怎么做/搜索引擎关键词的工具
  • 网站开启gzip/口碑营销成功案例
  • 网站建设如果登录失败/渠道营销推广方案
  • 网站建设算固定资产吗/新乡seo网络推广费用
  • 义乌网站建设/线上职业技能培训平台
  • 模板建网站怎么做seo/百度指数移动版
  • 网游开发软件/搜索引擎营销优化的方法
  • 平谷重庆网站建设/百度识图查图片
  • 做房地产用什么网站好/优化设计单元测试卷
  • 南京做机床的公司网站/怎么注册网站免费的
  • 梁朝伟做汤唯视频网站/营销传播
  • 网站开发需要学什么语言/高端定制网站建设
  • 网站建设增值税税率是多少钱/百度seo软件曝光行者seo
  • 重庆找网站推广/如何设计网站步骤
  • 影视传媒广告公司网站模板/网络优化论文
  • wordpress 香港繁体/seo人员是什么意思
  • 青岛专业做商业房的网站/最新国际新闻10条
  • 网站制作关键/外贸业务推广
  • 宁德工程建设监督网站/新闻头条今日要闻国内新闻最新
  • 如何用手机建设网站/网站建设公司哪家好?
  • 网站被挂马做js跳转/百度上怎么免费开店
  • 中小企业建网站/百度搜索链接入口
  • 政府网站建设先进经验交流材料/seo运营
  • 提供手机网站制作/一键免费创建论坛网站
  • 济南网站建设阝力荐聚搜网/抖音广告投放代理商
  • 荧光字体制作网站/seo博客教程
  • 网站规划包括哪些方面/南宁seo排名外包
  • 微信网站建设企业/百度seo优化哪家好
  • 网站开发的职业技术方面/网站优化网站
  • 网站seo设计方案案例/百度推广运营这个工作好做吗