仓酷云

标题: MYSQL网页设计分页存储历程(二)在sqlserver中前往更... [打印本页]

作者: 再现理想    时间: 2015-1-16 22:15
标题: MYSQL网页设计分页存储历程(二)在sqlserver中前往更...
解决方案提供商开始推动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
发几份SQL课件,以飨阅者
作者: 精灵巫婆    时间: 2015-1-28 05:10
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
作者: 再现理想    时间: 2015-2-5 16:49
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
作者: 老尸    时间: 2015-2-13 00:52
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
作者: 仓酷云    时间: 2015-3-3 11:59
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
作者: 小女巫    时间: 2015-3-11 11:05
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
作者: admin    时间: 2015-3-18 12:59
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
作者: 简单生活    时间: 2015-3-26 02:55
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2