仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 981|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页设计分页存储历程(二)在sqlserver中前往更...

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。在我的利用SQLServer2005的新函数机关分页存储过程当中,我提到了利用ROW_NUMBER()函数来取代top完成分页存储历程。

可是工夫长了,又发明了新成绩,就是奴才表的分页查询。比方:定单表和定单明细表,请求是查询定单,第二页,每页10条

复制代码代码以下:
--利用row_unmber()完成分页
--原本我们想要的了局是10条定单,了局却不是10条定单,而是10条明细
--实际上是针对的子表举行分页了,定单并非要显现的个数,出来的个数是明细的个数
--就是由于主表和子表团结查询的了局,主表纪录和子表纪录是1:N的干系,一个主表纪录有多个明细
select*from
(SELECTROW_NUMBER()OVER(ORDERBYoi.createdateDESC)ASrownumber,oi.orderseqno,od.OrderDetailID
FROMOrderInfooiLEFTJOINOrderDetailodONoi.OrderSeqNO=od.OrderSeqNO
WHEREoi.OrderSeqNOLIKE"%2%"
)ASo
WHERErownumberBETWEEN10AND20

了局以下图



很分明不是10条定单,而是10条明细。

  上面是对查询的一点改善,利用了游标
复制代码代码以下:
--办理下面的成绩,有以下几种举措
--1、先依据前提查询主表纪录,然后在C#代码中轮回,再次到数据库查询每条主表纪录的明细信息,然后赋值给属性
--2、在数据库的存储过程当中利用游标,也是先查询主表纪录,然后利用游标轮回的过程当中,查询子表信息,然后在C#中
--会合处置
--很明显,后一种削减了数据库的来往开支,一次猎取了想要的数据,团体以为要比第一种好,接待人人一同会商更好的举措
--必要注重的就是ROW_NUMBER()前往的范例是bigint,而不是int
--上面是游标的存储历程
--创建主表一时表
CREATETABLE#temp
(
rownumberbigint,
orderseqnoVARCHAR(36),
goodsnameVARCHAR(50),
companynameVARCHAR(100)
)
--创建子表一时表
CREATETABLE#detail
(
orderseqnoVARCHAR(36),
detailidUNIQUEIDENTIFIER,
unitpriceDECIMAL(12,2),
Qtyint
)
--拔出主表数据到主表一时表
insertinto#temp
SELECToo.rownumber,oo.OrderSeqNO,oo.GoodsName,oo.CompanyNameFROM
(SELECTROW_NUMBER()OVER(ORDERBYoi.createdateDESC)ASrownumber,
oi.OrderSeqNO,oi.GoodsName,ci.CompanyName
FROMOrderInfooiINNERJOINCompanyInfociONoi.CompanyID=ci.CompanyID
WHEREoi.CreateDate<GETDATE()
)ASoo
WHERErownumberBETWEEN10AND20
--界说游标
DECLARE@temp_cursorCURSOR
--给游标赋值
SET@temp_cursor=CURSORFORSELECT#temp.orderseqno,#temp.goodsnameFROM#temp
--界说游标轮回过程当中所需保留的一时数据
DECLARE@orderseqnoVARCHAR(36),@goodsnamevarchar(50)
--翻开游标
OPEN@temp_cursor
FETCHNEXTFROM@temp_cursorINTO@orderseqno,@goodsname
--轮回游标,查询子表数据,然后拔出子表一时表
WHILE@@FETCH_STATUS=0
BEGIN
INSERTINTO#detail
SELECTod.OrderSeqNO,od.OrderDetailID,od.UnitPrice,od.Qty
FROMOrderDetailod
WHEREod.OrderSeqNO=@orderseqno
FETCHNEXTFROM@temp_cursorINTO@orderseqno,@goodsname
END
--封闭游标
CLOSE@temp_cursor
DEALLOCATE@temp_cursor
SELECT*FROM#temp
SELECT*FROM#detail
--删除一时表
DROPTABLE#temp
DROPTABLE#detail

了局以下图,即刻看到效果就变了,接待人人一同会商更好的,更精准的分页查询。





  下面的T-SQL只在SQLServer2005上调试乐成。
保举一篇MSSQLServer的查询企图的相干内容,能够使用它优化SQL,写的不错。援用:SqlServer实行企图及Sql查询优化初探

正如前文所提到的,MySQL易学、易部署、易管理和易维护。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 06:17:25 | 只看该作者
发几份SQL课件,以飨阅者
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-28 05:10:29 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
再现理想 该用户已被删除
地板
 楼主| 发表于 2015-2-5 16:49:19 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
老尸 该用户已被删除
5#
发表于 2015-2-13 00:52:48 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
6#
发表于 2015-3-3 11:59:34 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
小女巫 该用户已被删除
7#
发表于 2015-3-11 11:05:06 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
admin 该用户已被删除
8#
发表于 2015-3-18 12:59:04 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
简单生活 该用户已被删除
9#
发表于 2015-3-26 02:55:36 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 07:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表