最新评论
Re:招聘Net兼职一名 王洋 2010-07-27 13:02
刚作的中英文网站 www.aumed.cn 有意电联 137 18 56 04 62
Re:翻译: .NET牛人应该知道些什么 风@人间 2010-05-18 15:10
很好 不过楼主博客部分文字重叠了 看不清 不知道是怎么了
Re:经济危机下站长的唯一出路:精品站 shenghuo.cn 2010-02-23 17:28
title:
上海生活网 - 上海本地最具人气的生活消费导航门户网站
description:
提供上海品牌特卖会、打折、娱乐、结婚、旅游、促销、优惠券等上海最新消费信息,为用户提供线上与线下的打折生活消费参考与引导,上海人就上上海生活网。
re: 经济危机下站长的唯一出路:精品站 隨風.NET 2009-05-29 02:19
域名不错 不过做分类信息的现在太多了吧
re: 经济危机下站长的唯一出路:精品站 shenghuo.cn 2009-05-28 18:06
@xiaotie
你访问的时间正好是服务器维护
@Jeffrey Zhao
老赵什么时候出个类似于petshop的小例子吧,具体讲讲怎么把mvc的思想用在webform项目里面。
re: 经济危机下站长的唯一出路:精品站 xiaotie 2009-05-27 17:27
域名不错 网站打不开
同意57楼的说法。
楼主看来平时没有怎么关注过博客园啊,row_number+CTE的东西n年前就开始有人讲,有人用了。
真是佩服楼主勇气。
re: 要命的键盘与鼠标 hoodlum1980 2009-05-26 20:55
笔记本键盘里ThinkPad的确实手感最好,当之无愧,我觉得比用台式机的大键盘还舒服。
re: 也谈分页存储过程的问题,堪称史上最强分页存储过程! hoodlum1980 2009-05-26 20:52
其实楼主讲的问题我是不懂的。不过我看楼主被拍的这么惨,同情一记。。。。
我记得以前看日本av的时候,总出现“史上最强”之类的字眼。
难道博客园也要沦落到这样ma
首页的质量如此的差。
哎,以前我一天看好几次,现在我好几天看一次。
问题不在于你发的存储过程不好。而是你的标题跟内容完全不符。。。。大家看着标题进来,结果跟期望有很大的落差。内容只是提到了SQL Server2005出来后具有的一个功能,大家在3、4年前就知道了。即使大家以前都不知道这个函数,你提到的内容有所帮助,但这个存储过程也真的无法是史上最强。。。Oracle在SQL Server2005之前就支持的。
这个,好像看到过了!row_number,mssql2005的特性
hehe, 还很热闹阿,我还是用sql 2000
做个记号,以后会用。
with之上的sql语句一定要使用“,”?
应该是“;”吧?
@神经错乱
如果是这样的话,建议楼主到mop大骂一通,绝对比这儿效果好,毕竟受众面积大嘛,呵呵。
这个是sqlserver2005及以上版本才有的功能,也没什么特殊的,要说写的好,比你这个好的太多了。谦虚一点总是没有错的。在八卦中,其它所有的挂都是有吉也有凶,唯独乾卦是没有凶的。古人也讲:满招损,谦受益。
<<ASP.NET揭秘>>一书中,这两种方式都已经给出了
--引用--------------------------------------------------
Jake.SHI: @菩提树下的杨过
貌似你06年没有告诉那些不知道的人啊!如果你06年就告诉火星人,也许火星人就和你一样先进了!所以的查你失职之罪啊!
--------------------------------------------------------
06年我还在用asp做开发时,就曾经研究过几种不同的“海量”数据的分页方法(其实也就是几百万数量级,严格意义来讲称不上海量)
http://blog.sqlsky.com/article.asp?id=52
http://blog.sqlsky.com/article.asp?id=6
http://blog.sqlsky.com/article.asp?id=332(就是文中所提的方法,不过加上了自定义排序,指定任意查询条件等)
这些都是06年就已经贴在互联网上的文章,你没baidu或google到,不代表就没有,分页这个话题已经没啥新意了,要玩高级一点的,建议你研究下上千万甚至上亿数量的高效查询(这种情况下,常规关系型数据库包括存储过程已经能力有限了,你可以去看下百度/yahoo/google是如何处理的,网上有一些探讨性的文章)
最后,看了博主对大家评论的回复,个人不太赞同博主的治学态度
@tblName varchar(4000), -- 表名
@strGetFields varchar(200) = '*', -- 需要返回的列
@fldName varchar(200) = ' ', -- 排序的字段名
@pageSize int = 10, -- 页尺寸
@pageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@orderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(4000) = ' ' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(8000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=' '
set @strSQL = 'select count(*) as Total from '+@tblName+'
where '+@strWhere
else
set @strSQL = 'select count(*) as Total from '+@tblName+''
end
else
begin
if @orderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName + ' desc'
--如果@orderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName + ' asc'
end
if @pageIndex<1
begin
set @pageIndex=1
end
if @pageIndex = 1
begin
if @strWhere != ' '
set @strSQL = 'select top '+str(@pageSize)+' '+@strGetFields+' from '+@tblName+' where '+@strWhere+' '+@strOrder
else
set @strSQL = 'select top '+str(@pageSize)+' '+@strGetFields+' from '+@tblName+' '+@strOrder
--print(@strSQL)
end
else
begin
set @strSQL = 'select top '+str(@pageSize)+' '+@strGetFields+' from '
+@tblName+' where '+@fldName+'' +@strTmp+ '('+@fldName+')
from (select top '+str((@pageIndex-1)*@pageSize)+' '+@fldName+'
from '+@tblName+' '+@strOrder+') as tblTmp) '+@strOrder
if @strWhere != ' '
set @strSQL = 'select top ' +str(@pageSize)+' '+@strGetFields+' from '
+@tblName+' where '+@fldName+' '+@strTmp+' ('
+@fldName+') from (select top ' +str((@pageIndex-1)*@pageSize)+' '
+@fldName+' from '+@tblName+' where ' +@strWhere+ ' '
+@strOrder+') as tblTmp) and '+@strWhere+' '+@strOrder
end
end
exec (@strSQL)
测试下,看看那个更快一些。
菜鸟来龟毛来挑事:
看到了园子里很多同志们探讨分页取数据的问题,有的是纯粹的存储过程,有的是拼凑sql字符串,各说各的好,暂且不论,有一种新的方式暂时没有看到大家发布,今天发布出来,欢迎拍砖一起进步!
---------------------------------------------------------
1.你这个不也只是纯粹的存储过程?
拼凑sql ,很多人是为了做成通用.
如上所述,首先构建临时表,计算起始条数和结束条数。然后量表联合搜索我们需要的数据,在一个41716条数据的环境测试下的时间为00:00:05。可见数据如果为百万级的话我们就会为这个东东等待多久!
-----------------------------------------------------------
我不知道你这个测试出来的数据是怎么样.
网络上同样有一个测试百万级的数据.在头1000~5000页的查询时.也只需要1秒左右.
如果是低于1000页.几乎也是00:00:00.
-------------------------------------------------------
今天有一篇文章很火.就是什么文章该放在首页.
以我的分区及评分的建议.
我觉的这篇可以放在[sql]分区中.
且评分为5分.总分10分
p.s.特大标题党..
re: 也谈分页存储过程的问题,堪称史上最强分页存储过程! 别爱上哥,哥只是个传说! 2009-05-26 15:57
直接一票否定..不淡什么 史上最强 ..
╮(╯▽╰)╭,原来一个好的标题会吸引到如此多的人气啊!
@Jeffrey Zhao
呵呵,年轻人难免气盛,磨磨就好了。岂不知山外有山人外有人,最强这个词还是别乱用。其实CTE老久就有人提了,博主今天提出来还冠以最强来未免言过于实,任何的代码、解决方案皆有其适用的场合,不能一概而论之。
分页代码也是需要看场合的,几千条有几千条记录的处理方式,几万条记录有几万条记录的处理方式,上百万上千万记录也有相应的处理方式,况且撇开记录数不说,光字段数量、查询的复杂度这些因素算进去,至少在目前来说,在任何场合下都最快的分页代码鄙人还没看到,而且不知道楼主所谓的几乎不需要时间是在哪种场合下得出来的。
不过提醒一下楼主,你的生活网还真的不是那么好看,漏洞百出呀,呵呵。
存储过程对效率的提高没那么明显。。。
好的索引,好的数据库结构就差不多了
...................
set rowcount @pageEnd //注意这句
insert into @temp (tid) select po_id from **_header order by po_id desc
select z.po_id,z.iid_nbr
from **_header z
inner join @temp t on z.po_id = t.tid
and t.id between @pageStart and @pageEnd-1
order by t.id desc
第一个存储过程加上 我加的那句你再试试数据,哈戳戳的,难怪要被别个批,还不承认。。。
Row_number本身都不是一个很新的概念了。会用也谈不上最强。。。。
又是这问题...
很多人说我有几百上千W数据,不用存储过程分页行不!
但用户真的会一页页的去看几百上千W数据?
如果我是用户系统能提供我查看符合当前条件10页的数据就足够了,如果只是这10页的数据分页再怎样分也不存在任何问题...
--引用--------------------------------------------------
Jake.SHI: 我已经很礼貌的回复了几个,我还的很礼貌的提醒大家,敢说不屑的话,请赐教好的存储过程!不然我会鄙视你的!嘿嘿!
--------------------------------------------------------
不是不屑你,而是sql 2005刚出来,这个方法就众人皆知了,你还在这里史上最强,不说你火星,说谁火星?你随便搜搜,就能搜出一大把。谁说园子里没人讨论?
http://www.google.cn/search?client=aff-cs-maxthon&forid=1&ie=utf-8&oe=UTF-8&hl=zh-CN&q=sql+2005+%E5%88%86%E9%A1%B5
再随便找个园子里2006年的文章
http://www.cnblogs.com/ly4cn/archive/2006/07/11/447905.html
@Jake.SHI
分页这种属于炒了7-8年的隔夜剩饭,翻来复去就是那点东西,没啥新花样,无非就是临时表,游标分页,按照id排序分页,还有row_number,这些东西google一下要多少有多少,博客园的首页也不知道发了多少次,都是没啥新意的,当然如果你能写点新东西我啥也不说。
我已经很礼貌的回复了几个,我还的很礼貌的提醒大家,敢说不屑的话,请赐教好的存储过程!不然我会鄙视你的!嘿嘿!
@Juzz Pig(橘子&猪)
即便出来了,貌似园子里讨论分页的人里面没有人使用这个啊!还是拼接字符串啊!传统的啊!嘿嘿 猪哥哥有没有好的solution啊!
@紫色永恒
呵呵 世界和平估计你是够呛了 你还是写一个好点的存储过程出来 平息一下我对你维护世界和平的鄙视吧!
re: 也谈分页存储过程的问题,堪称史上最强分页存储过程! Juzz Pig(橘子&猪) 2009-05-26 15:10
@Jake.SHI
SQL Server 2005一出来,全世界就晓得了,你不关心官方消息和手册的吗?
@duwamish
哈哈 duwamish这个名字不错,只是不知道你能不能写出duwamish般经典的分页存储过程!
@kiler
写此文的目的就是希望赐教更好的分页方式,如果有不火星的 还请不吝赐教!一句火星似乎不能显示你的水准!只能显示你的自大!
@菩提树下的杨过
貌似你06年没有告诉那些不知道的人啊!如果你06年就告诉火星人,也许火星人就和你一样先进了!所以的查你失职之罪啊!